$.getJSON在Knockout.js中的URL错误

$.getJSON wrong URL in Knockout.js

本文关键字:中的 URL 错误 js Knockout getJSON      更新时间:2023-09-26

我正在使用Laravel 4 PHP MVC框架和Knockout.js作为一个简单的应用程序。

我已经建立了一个RESTful API,并想从客户端进行$.getJSON请求,但get请求被发送到wrw URL。

Knockout没有执行GEThttp://mydomain.com/users/123Fdfsd02/reports的操作,而是将请求发送到http://mydomain.com/users/reports,这是错误的URL。

这是我的淘汰赛代码:

function ReportViewModel() {
    var self = this;
    self.report = ko.observable();  
    self.getAllReports = function(data) {
        $.getJSON("reports", function(data) {
            self.report(data);
        });
    }
    self.getAllReports();
};
ko.applyBindings(new ReportViewModel());

我在这里错过了什么?我已经尝试将url设置为./reportsreports,但仍然没有成功。

谢谢你帮助一个新手!

在我的Laravel项目中,在其他可能需要它的脚本之前,我把它放在了部分头视图中:

<script>
    var BASE_URL = "{{ URL::to('/') }}";
</script>

然后我可以组装AJAX调用,比如。。。

 $.getJSON(BASE_URL+"api/content", params, function(response) {
     //whatever 
 });

无论应用程序是在本地主机的子文件夹中运行,还是在暂存或生产环境中运行,这一切都会起作用。

也许只使用绝对路径而不是相对路径会更明智。

你能用变量构造路径/users/123Fdfsd02/reports吗?或者这是不可能的?

哪个URL显示在浏览器的地址栏中?也许http://mydomain.com/users

Personaly,我会这样做:

使用"base"标记设置HTML。"base"标记将确保每个相对URL都以其"href"属性的值为前缀,因此AJAX对相对URL user/detail/1的调用将转到该绝对URL->http://mydomain.com/user/detail/1

<!doctype html>
<html lang="en">
<head>
    ...
    <base href="http://mydomain.com/">
    ...

然后,在AJAX调用中使用相对URL,基于"基本"标记中定义的根URL

function ReportViewModel() {
    ...
        $.getJSON("users/123Fdfsd02/reports",
    ...
};

防弹解决方案是使用绝对URL。

这应该有效:

var rootUrl = "/users/"+ userToken +"/reports"

userToken可以通过以下方式找到:

s = document.location.href;
s = s.replace('http://mydomain.com/users/', '');
userToken=  s.substring(0, s.indexOf('/'));

我希望它能有所帮助。