2014-01-16 28 views
1

我有以下骨幹模型。骨幹PUT請求跨域不追加URL到URL

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

我的應用程序發出OPTIONS請求到api.site1.com/list

該請求成功後,它向GET請求api.site1.com/list

對於POST也是如此。

當我在提取前執行 modelObj.save({name: "abc"})時,我的應用程序向api.site1.com/list發送OPTIONS請求,成功時它執行POST請求。

,當我做了更新,即PUT然而,

我期待骨幹附加標識的url,像api.site1.com/list/1和執行OPTIONS請求

但是,當我檢查我的開發工具,選項請求時到api.site1.com/list。成功時,它將PUT請求傳送到api.site1.com/list而不是api.site1.com/list/1

爲什麼會發生這種情況以及如何處理這種情況?

回答

4

通過設置aModel.url,您可以強制請求中使用的網址。設置aModel.urlRoot代替:

urlRoot model.urlRoot或model.urlRoot()
指定urlRoot如果你使用模型的集合之外,以啓用默認網址 函數生成的URL是 基於模型ID。

嘗試

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