每个请求的XMLHttpRequest setRequestHeader

ror*_*o21 5 javascript ajax jquery xmlhttprequest

以下代码自动Authorization request header为所有jQuery Ajax请求设置:

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Authorization', 'Bearer ' + jwtoken);
    }
});
Run Code Online (Sandbox Code Playgroud)

对于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);  
Run Code Online (Sandbox Code Playgroud)

我不想xhr.setRequestHeader('Authorization', 'Bearer ' + jwtoken);在创建XMLHttpRequest对象时使用beacuse 变量jwtoken已被删除.

Gan*_*mar 13

一种方法是创建一个闭包,并在它可用时将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');
Run Code Online (Sandbox Code Playgroud)

以下是如何使用此方法获取新的XMLHttpRequest对象.

var xmlHttpRequest = customXMLHttpRequest('post','http://www.yoursite.com',true);
Run Code Online (Sandbox Code Playgroud)

此对象将设置标头.

另一种选择是将令牌保存在cookie中,并在创建XMLHttpRequest时,在从cookie中检索后使用此值.