2015-11-05 67 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