跨域PUT请求跨域不会将id附加到URL

时间:2014-01-16 11:47:59

标签: javascript backbone.js

我有以下骨干模型。

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);
};

当我执行如下所示的抓取方法时

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附加到网址,例如api.site1.com/list/1并执行OPTIONS请求

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

发出PUT请求

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

1 个答案:

答案 0 :(得分:4)

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

  

urlRoot model.urlRoot或model.urlRoot()
  如果你是,请指定urlRoot   使用集合外部的模型来启用默认URL   用于根据模型ID生成URL。

尝试

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