Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改XMLHttpRequest中的请求头_Javascript_Ajax - Fatal编程技术网

Javascript 修改XMLHttpRequest中的请求头

Javascript 修改XMLHttpRequest中的请求头,javascript,ajax,Javascript,Ajax,我制作了一个ajax调用拦截器来侦听XMLHttpRequests 我想修改XHR的请求头。由于某些原因,我只能在XMLHttpRequest.send()中更改它们。在XMLHttpRequest.open()中修改它们是否为时过早?它抛出我在下面代码中粘贴的异常 那么,为什么我会出错呢 (function (open) { XMLHttpRequest.prototype.open = function () { this.setRequestHeader('fo

我制作了一个ajax调用拦截器来侦听XMLHttpRequests

我想修改XHR的请求头。由于某些原因,我只能在
XMLHttpRequest.send()
中更改它们。在
XMLHttpRequest.open()中修改它们是否为时过早?它抛出我在下面代码中粘贴的异常

那么,为什么我会出错呢

(function (open) {

    XMLHttpRequest.prototype.open = function () {

        this.setRequestHeader('foo', 'bar'); 
        // InvalidStateError: An attempt was made to 
        // use an object that is not, or is no longer, usable

        open.apply(this, arguments);
    };

})(XMLHttpRequest.prototype.open);

(function (send) {

    XMLHttpRequest.prototype.send = function () {

        this.setRequestHeader('foo', 'bar'); // OK

        send.apply(this, arguments);
    };

})(XMLHttpRequest.prototype.send);

for(var i = 0; i < 3; i++){

    var rnd = Math.round(Math.random()*3+1),
        httpRequest = new XMLHttpRequest();

    httpRequest.onreadystatechange = function () { };
    httpRequest.open('GET', '/echo/json?delay=' + rnd);
    httpRequest.send();

}
(功能(打开){
XMLHttpRequest.prototype.open=函数(){
setRequestHeader('foo','bar');
//InvalidStateError:试图
//使用不可用或不再可用的对象
open.apply(这个,参数);
};
})(XMLHttpRequest.prototype.open);
(功能(发送){
XMLHttpRequest.prototype.send=函数(){
this.setRequestHeader('foo','bar');//确定
send.apply(这个,参数);
};
})(XMLHttpRequest.prototype.send);
对于(变量i=0;i<3;i++){
var rnd=Math.round(Math.random()*3+1),
httpRequest=新的XMLHttpRequest();
httpRequest.onreadystatechange=函数(){};
httpRequest.open('GET','/echo/json?delay='+rnd);
httpRequest.send();
}
如果您交换:

this.setRequestHeader('foo', 'bar'); 
open.apply(this, arguments);
要获得:

open.apply(this, arguments);
this.setRequestHeader('foo', 'bar'); 

那它能用吗?

是的,你能解释一下为什么吗?因为你需要在设置它之前打开它。