Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Xmlhttprequest - Fatal编程技术网

Javascript 重复XMLHttpRequest请求

Javascript 重复XMLHttpRequest请求,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我的应用程序有一些jquery http调用和一些角度http调用 所以。。要向每个请求添加参数,我在代码的开头添加此代码 var op = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function() { this.addEventListener("readystatechange", function() { if(this.readyState === 4 &&

我的应用程序有一些jquery http调用和一些角度http调用

所以。。要向每个请求添加参数,我在代码的开头添加此代码

var op = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {

    this.addEventListener("readystatechange", function() {

        if(this.readyState === 4 && this.status === 200 ){
            // http call is done
        }

    }, false);
    arguments[1] = arguments[1]+'?test=testParam';
    var resp = op.apply(this, arguments);
    return resp;
};
现在我想要两样东西

1) 我想在应用之前更改响应


2) 如果响应是404。。。。我想再打一个电话。。。。以回应为例。。。然后用一些新参数重复调用。简短的回答是,我们不能扩展
XMLHttpRequest
来重试连接,因为我们不能触发
。如果触发了
.onload
事件,就打开
。编写同一个
XMLHttpRequest
实例的几个
.open
会导致每个
.open
重写以前的
.open
,但是一旦触发
.onload
事件,我们就不能重用该实例(请求不发送),因此我们必须创建
XMLHttpRequest
的另一个实例。因此,我认为最接近的方法是重用代码,如下所示:

var参数=106;
var div=document.getElementById(“重试”);
var div2=document.getElementById(“成功”);
var div3=document.getElementById(“响应”);
div.innerHTML=“正在尝试:”+param;
var xhr=new XMLHttpRequest();
xhr.open('GET','https://jsonplaceholder.typicode.com/posts/“+param);
xhr.onload=函数(){

如果(this.status==200){//这不符合主题…..我正在尝试生成一个拦截器,而不是递归拦截器calls@Michalis我更新了答案,使之更符合你的问题。