以下代码自动为所有jQuery Ajax请求设置Authorization request header
:
$.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
已被删除。
答案 0 :(得分:10)
一种方法是创建一个闭包,并在它可用时将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中检索后使用此值。