2015-11-05 77 views
3

下面的代碼會自動設置Authorization request header所有的jQuery Ajax請求:的XMLHttpRequest setRequestHeader爲每個請求

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('Authorization', 'Bearer ' + jwtoken); 
    } 
}); 

我想要的東西,像上面手動創建的所有XMLHttpRequest對象。更確切地說,下面的請求沒有設置Authorization header

var xhr = new XMLHttpRequest(); 
xhr.file = $('myfile')[0].files[0]; 
var fd = new FormData(); 
fd.append('fileId', fileId); 
xhr.open('post','my-rote', true) 
xhr.send(fd); 

我不想用xhr.setRequestHeader('Authorization', 'Bearer ' + jwtoken);怎麼一回事,因爲當我創建XMLHttpRequest對象變量jwtoken已被刪除。

回答

6

一種方法是創建一個閉包,並在可用時將jwtoken傳遞給它。您可以使用閉包返回的方法來創建一個XMLHttpRequest對象。

var customXMLHttpRequest = (function (jwtoken) { 

    function getXMLHttpRequest(method, url, async){ 
     var xmlHttpRequest = new XMLHttpRequest(); 
     xmlHttpRequest.open(method, url, async); 
     xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ' + jwtoken); 
     return xmlHttpRequest; 
    } 

    return getXMLHttpRequest; 
})('Your token'); 

以下是如何使用此方法獲取新的XMLHttpRequest對象。

var xmlHttpRequest = customXMLHttpRequest('post','http://www.yoursite.com',true); 

此對象將設置標題。

另一種選擇是將標記保存在cookie中,並在創建XMLHttpRequest時,從cookie中檢索它之後使用此值。

+0

謝謝,這真的幫了我。但是我認爲有可能使用類似'$ .ajaxSetup beforeSend'的東西。 – roroinpho21