我正在使用Laravel 4 PHP MVC框架和Knockout.js来创建一个简单的应用程序。
我已经设置了RESTful API,并希望从客户端发出$.getJSON
请求,但是get请求会被发送到wring URL。
而不是GET
到http://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());
我在这里缺少什么?我已尝试将网址设置为./reports
和reports
,但仍然没有运气。
感谢您帮助推出新手!
答案 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的子文件夹运行,还是在登台或生产环境中运行,它都会起作用。