【问题标题】:How to abort XMLHttpRequest if taking a lot of time to load?如果需要大量时间加载,如何中止 XMLHttpRequest?
【发布时间】:2020-07-05 18:07:05
【问题描述】:

我最近开始使用 XMLHttpRequest。如果请求花费太多时间来给出响应,有没有办法中止请求?和另一个问题,当我提出请求时,为什么我无法在 XMLHttpRequest.onprogress 中执行 console.log?

let xhr = new XMLHttpRequest();
 xhr.onreadystatechange = function () {
       if(this.readyState === 4)
           resolve(something)
}
xhr.onprogress = function () {
   console.log("loading..") // not printing
}

 xhr.open('GET', url);
//headers
xhr.send();

【问题讨论】:

    标签: javascript reactjs react-native xmlhttprequest


    【解决方案1】:

    要中止,只需使用xhr.abort() 方法,它将取消您的请求。此外,除非它正在工作,否则您不希望它取消,因此您可以设置一个时间限制,如果未检索到响应,将在该时间限制内执行中止。

    还取一个变量isReceived 并将其设置为false。现在,如果收到响应,它将设置为 true,并且不会执行 abort() 方法。否则,如果在期望的时间内没有收到,它将保持为 false 并被中止

    let isReceived = false;
    let xhr = new XMLHttpRequest();
     xhr.onreadystatechange = function () {
           if(this.readyState === 4)
               isReceived = true;
               resolve(something)
    }
    xhr.onprogress = function () {
       console.log("loading..") // not printing
       setTimeout(function(){  
         if(!isReceived){
         xhr.abort(); 
        }
       }, 2000);
    }
    
     xhr.open('GET', url);
    //headers
    xhr.send();
    

    【讨论】:

    • 您好,感谢您的回答。在上面的代码中,我应该把这个语句放在哪里?
    • 如果 AJAX 操作成功,是否值得取消超时?我想如果它完成了就不能中止,但是不管结果如何,打电话给abort()仍然感觉有点脏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2011-04-25
    • 2015-12-15
    相关资源
    最近更新 更多