如何停止IE11中空闲的(UNSENT)XmlHttpRequest超时?

时间:2018-10-23 15:25:50

标签: javascript jquery ajax internet-explorer xmlhttprequest

我的程序将生成大量(数千个)内容URL,然后将其循环通过,并对每个URL发出ajax GET请求。

我遇到的问题是IE一次只能处理6个请求,因此其余请求都被readyState =“ UNSENT”卡住了。这仅是有问题的,因为其中一些请求可能需要几分钟,而其他请求仅需要几秒钟。

每次我的程序运行时,恰好在300秒标记处,所有UNSENT XHR请求都将超时并在控制台中引发错误:XMLHttpRequest: Network Error 0x2ee2, Could not complete the operation due to error 00002ee2.。在研究了此错误之后,我注意到这实际上是网络超时。

经过大量测试,我尝试并确认了一些方法:

  • 这完全是在IE11中发生的(在Chrome中测试并运行良好)
  • 我尝试以多种不同的方式/方式设置超过300秒的超时。所有这些都只影响单个Ajax调用,这意味着如果一个启动并花费了超过我的超时时间(比如说十分钟),它将超时,但是UNSENT请求仍然会在五分钟后超时。
  • 还尝试将超时设置为0,不起作用(300秒后仍抛出UNSENT请求)

尝试1

 sContentUrls.forEach(function( sContentUrl ) {
      $.get({
           url: sContentUrl,
           timeout: 600000,
           error: function() {
           },
           success: function() {
                console.log("Success");
           },
           async: true
      });
});

尝试2

sContentUrls.forEach( function( sContentUrl ) {

    var xhr = new XMLHttpRequest();
    xhr.open("GET", sContentUrl, true);
    xhr.onreadystatechange = function(){
        if (xhr.readyState === 4 && xhr.status === 200){
            console.log("Success"); 
        }
    };

    xhr.onprogress = function(){ };
    xhr.ontimeout = function(){ };
    xhr.onerror = function () { };
    setTimeout(function(){
        xhr.send();
    }, 0);
});

我想知道如何阻止IE11引发此错误并中止数千个请求。我已经研究过为请求设置一个管理器/队列,以便仅在可以立即发送或发送新请求时才创建一个新请求。

有人有没有看过这个问题,或者没有知道潜在的解决方法/解决方案?我可以确认如果使请求同步,则不会发生这种情况,但是由于请求数量巨大,这对我来说不是一个好选择。

谢谢!

0 个答案:

没有答案