Knockout.js中的$ .getJSON错误的网址

时间:2013-07-12 12:45:09

标签: javascript model-view-controller knockout.js laravel

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

我已经设置了RESTful API,并希望从客户端发出$.getJSON请求,但是get请求会被发送到wring URL。

而不是GEThttp://mydomain.com/users/123Fdfsd02/reports Knockout将请求发送到http://mydomain.com/users/reports,这是错误的网址。

这是我的淘汰赛代码:

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());

我在这里缺少什么?我已尝试将网址设置为./reportsreports,但仍然没有运气。

感谢您帮助推出新手!

4 个答案:

答案 0 :(得分:0)

也许只使用相对路径的绝对路径会更聪明。

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

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

答案 1 :(得分:0)

这应该有效:

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

可以通过这种方式找到userToken:

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

userToken=  s.substring(0, s.indexOf('/'));

我希望它有所帮助。

答案 2 :(得分:0)

Personaly,我会这样做:

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

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

然后,根据'base'标签中定义的根URL,在AJAX调用中使用相对URL

function ReportViewModel() {
    ...

        $.getJSON("users/123Fdfsd02/reports",
    ...
};

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

答案 3 :(得分:0)

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

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

然后我可以像......一样组装AJAX调用。

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

无论应用程序是从我的localhost的子文件夹运行,还是在登台或生产环境中运行,它都会起作用。