1

我正在将 Laravel 4 PHP MVC 框架和 Knockout.js 用于我正在做的一个简单的应用程序。

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

而不是GEThttp://mydomain.com/users/123Fdfsd02/reportsKnockout 进行操作,而是将请求发送到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仍然没有运气。

感谢您帮助新手!

4

4 回答 4

0

就个人而言,我会这样做:

使用“base”标签设置 HTML。“base”标签将确保每个相对 URL 都将附加其 'href' 属性的值,因此对相对 URL 的 AJAX 调用user/detail/1将转到此绝对 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。

于 2013-07-12T12:55:11.667 回答
0

这应该工作:

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

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

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

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

我希望它有所帮助。

于 2013-07-12T12:54:07.520 回答
0

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

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

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

于 2013-07-12T12:51:24.293 回答
0

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

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

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

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

无论应用程序是从我的 localhost 的子文件夹中运行,还是在暂存或生产环境中运行,它都可以正常工作。

于 2013-07-12T14:24:30.370 回答