每个请求的XMLHttpRequest setRequestHeader

时间:2015-11-05 13:26:52

标签: javascript jquery ajax xmlhttprequest

以下代码自动为所有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已被删除。

1 个答案:

答案 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中检索后使用此值。