2012-12-07 49 views
5

在我的REST服務器中,它要求access_token存在於每個請求中。即在發佈數據時,需要將access_token與屬性一起提交。在backbone.js中添加access_token

如何配置backbone.js來爲每個GET,PUT,POST和DELETE請求添加access_token?

謝謝。

回答

1

Backbone使用jQuery/Zepto進行AJAX請求,因此您可以使用這些庫中提供的功能。

要將自定義標頭添加到jQuery所做的所有XHR調用中,可以使用在每個ajax請求之前觸發的jQuery.ajaxSend event,並修改它接收的jqXHR作爲參數。

編輯基於OP的評論:

可能修改發送的數據最簡單的方法是重寫Backbone.sync功能。你可以換本機實現,並添加所需的屬性有:

var nativeSync = Backbone.sync; 
Backbone.sync = function (method, model, options) { 
    //for POST/PUT requests, add access token to the request 
    if(model && (method === 'create' || method === 'update')) { 

    var data = _.extend(model.toJSON(), { 
     access_token: 'token' 
    }); 

    options.data = JSON.stringify(data); 
    } 
    //call the native Backbone.sync implementation 
    nativeSync(method, model, options); 
}; 
+0

Hello fencliff。如果我想讓access_token在數據有效載荷中而不是在標題中,我該如何實現呢?我是否.ajaxSend(函數(e,jqxhr,設置){settings.data.access_token ='mytoken'})它? – Mikko

+0

也可以這樣做 - 但是您確定要將access_token添加到GET和DELETE請求中嗎?提供使用這些動詞的請求主體並不常見,而且大多數Web服務器無論如何都會忽略主體。 – jevakallio

+0

其實我使用的是https://github.com/philsturgeon/codeigniter-restserver REST服務器,當我檢查源代碼時,他們依賴於請求主體。 – Mikko

4

好吧,我想我找到了一種方法如何做到這一點的jQuery的。

$.ajaxSetup (
    { 
     data: { access_token: 'my_access_token' } 
    } 
);