2012-11-29 63 views
5

我正在嘗試在Yii中集成Backbone,因此我需要REST。所以我安裝了一個Yii擴展,restfullyii,它使用了需要傳遞給請求的用戶名和密碼。問題是我不知道如何用Backbone做到這一點。將自定義HTTP標頭傳遞給RESTful請求

通緝請求的例子:

List 
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/  
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/limit/1 
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: [email protected]" -H "X_REST_PASSWORD: [email protected]" http://yii-tester.local/api/sample/limit/10/5 (limit/offeset) 

當前錯誤的反應,這完全是有道理的..:

{ 
    "success": false, 
    "message": "You are not authorized to proform this action.", 
    "data": {"errorCode":500} 
} 

有沒有人有一個線索如何在整個骨幹網發送這樣的價值觀?

回答

2

骨幹將其XHR請求委託給jQuery/Zepto,這就是你將要修改的。

的最簡單的解決方案是可能通過$.ajaxSetup提供默認選項和headers options

報頭(加入1.5)
默認值:{}

的附加標題的鍵/值對的地圖隨請求發送 。該設置在beforeSend函數被調用之前設置;因此,可以在beforeSend函數內從 覆蓋標頭設置中的任何值。

你會設置這樣的:

$.ajaxSetup({ 
    headers:{ 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    } 
}); 

發送將有自定義頁眉的每個請求。見http://jsfiddle.net/nikoshr/j5Rr4/

或者你也可以通過額外的選項,每個請求,骨幹將它們轉發給jQuery的:

var m = new Backbone.Model(); 
m.fetch({ 
    headers:{ 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    } 
}); 

http://jsfiddle.net/nikoshr/j5Rr4/2/

最後,你可以覆蓋Backbone.sync添加標題爲每個請求:

Backbone.realsync = Backbone.sync; 
Backbone.sync = function(method, model, options) { 
    options || (options = {}); 
    options.headers = { 
     X_REST_USERNAME: "[email protected]", 
     X_REST_PASSWORD: "[email protected]" 
    }; 

    return Backbone.realsync.call(model, method, model, options); 
}; 

var m = new Backbone.Model(); 
m.fetch(); 

http://jsfiddle.net/nikoshr/j5Rr4/4/

+0

第一個選項不起作用,不會添加標題,但這是一個不錯的努力。第二個選項不適用於我,因爲我正在獲取集合而不保存模型。你也有這個建議嗎? –

+0

@SjaakRusma使用fetch修改,但與$ .ajaxSetup完全相同:將自定義標頭添加到請求。用控制檯檢查小提琴,你應該看到額外的標題。 – nikoshr

+0

Ajaxoptions無效,將第二個編輯選項添加到m.fetch({..});其中m是Collection,WORKED!謝謝! –