【问题标题】:$.getJSON wrong URL in Knockout.js$.getJSON 在 Knockout.js 中的 URL 错误
【发布时间】:2013-07-11 00:21:16
【问题描述】:

我正在使用 Laravel 4 PHP MVC 框架和 Knockout.js 来开发我正在做的简单应用程序。

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

而不是将GET 发送到http://mydomain.com/users/123Fdfsd02/reports,Knockout 将请求发送到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,但仍然没有运气。

感谢您帮助新手!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我浏览器中的 url 是 mydomain.com/users/123Fdfsd02 所以我想知道为什么请求 url 从“123Fdfsd02”中删除。 API 没有以某种方式设置,因此我可以动态创建 URL,因为我认为这不需要。
    • 也许只是利用window.location.href + '/reports'
    • 对不起,是window.location.pathname + '/reports'
    【解决方案2】:

    这应该可行:

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

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

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

    希望对你有帮助。

    【讨论】:

    • 那userToken是怎么定义的?
    【解决方案3】:

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

    使用“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。

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-30
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        相关资源
        最近更新 更多