2013-07-12 40 views
1

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

我已经设置了一个RESTful API,并且想要从客户端执行$.getJSON请求,但获取请求会发送到绑定的URL。

而不是做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()); 

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

感谢您帮助newb!

回答

0

我这扔在头鉴于我的Laravel项目部分,其他脚本之前可能需要它:

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

然后我就可以组装AJAX调用像...

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

而且无论应用程序是从本地主机的子文件夹运行,还是在分段或生产环境中运行,它都可以运行。

0

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

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

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

+0

在我的浏览器中的网址是mydomain.com/users/123Fdfsd02所以我想知道为什么请求的网址从“123Fdfsd02”中删除。 API的设置方式并非如此,以便我可以动态创建URL,因为我认为这不是必需的。 – Ismailp

+0

也许只是使用'window.location。href +'/ reports'' – Milaan

+0

对不起,它的'window.location.pathname +'/ reports''。 – Milaan

0

这应该工作:

var rootUrl = "https://stackoverflow.com/users/"+ userToken +"/reports" 

哪里userToken可以找到这样:

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

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

我希望它能帮助。

+0

那么userToken是如何定义的呢? – Ismailp

+0

我更新我的帖子 – Damien

0

个人意见,我会这样做:

设置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/"> 
    ... 

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

function ReportViewModel() { 
    ... 

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

Bulletproof解决方案是使用绝对URL。