【问题标题】:Backbone PUT request to cross domain is not appending id to URL跨域的主干 PUT 请求未将 id 附加到 URL
【发布时间】:2014-01-16 20:02:38
【问题描述】:

我有以下骨干模型。

var aModel = Backbone.Model.extend({
   url: 'http://api.site1.com/list
});

modelObj = new aModel();

我的应用程序的域是product.site1.com,所以我的应用程序向服务器发出的所有请求都是跨域请求。

我对 API 的所有主干请求都需要公共标头,所以我编写了以下主干同步方法

var sync = Backbone.sync;
Backbone.sync = function(method, model, options) {
    options.beforeSend = function (xhr) {
        xhr.setRequestHeader('key1', 'ABCD');
        xhr.setRequestHeader('key2', 'EFGH');
    };
    sync(method, model, options);
};

当我执行下面的 fetch 方法时

modelObj.fetch();

我的应用程序向 api.site1.com/list 发出 OPTIONS 请求

该请求成功后,它会向api.site1.com/list发出GET请求

POST 也是如此。

当我表演时 modelObj.save({name: "abc"}) 在获取之前,我的应用程序向 api.site1.com/list 发送 OPTIONS 请求,成功后它执行 POST 请求。

而当我这样做是为了更新,即 PUT,

我希望主干将 id 附加到 url,例如 api.site1.com/list/1 并执行 OPTIONS 请求

但是当我检查我的开发工具时,OPTIONS 请求发送到api.site1.com/list。成功时,它会向api.site1.com/list 发出 PUT 请求,而不是 api.site1.com/list/1

为什么会发生这种情况以及如何处理这种情况?

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    通过设置aModel.url,您可以强制使用请求中的 url。改为设置aModel.urlRoot

    urlRoot model.urlRoot 或 model.urlRoot()
    如果您是,请指定 urlRoot 使用集合之外的模型,以启用默认 url 函数根据模型 id 生成 URL。

    试试

    var aModel = Backbone.Model.extend({
       urlRoot: 'http://api.site1.com/list'
    });
    

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2014-10-29
      • 2017-04-29
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2013-06-22
      • 2016-09-09
      相关资源
      最近更新 更多