Ajax:设置超时是否总是覆盖浏览器的超时?

Adr*_* Be 11 javascript ajax jquery

在普通的javascript中执行Ajax请求时,似乎可以设置超时值.请参阅如何在浏览器中检测AJAX(XmlHttpRequest)调用的超时?

当我使用jQuery的ajax实现和其他类似的框架时,它也是可能的.请参阅设置ajax超时(jQuery)

浏览器似乎对其默认超时有相当模糊的规范.请参阅浏览器超时

因此,有人可能会"嘿,我要为我的ajax请求设置超时,以便所有用户都具有相同的超时".

但接下来的问题是:它会在所有情况下实际覆盖浏览器的超时吗?

当我说"所有"情况时,我的意思是,例如,如果浏览器超时值小于您的ajax请求超时值.

我怀疑它没有.

我还怀疑最好总是有一个超时错误处理程序,以确保无论发生什么,您都可以显示相关消息,这将为您的支持团队节省数小时的工作,并为您的公司节省资金.请参阅确定$ .ajax错误是否超时

提前致谢

car*_*eol 5

这是一个有趣的问题,我在 Chrome 59.0 和 Firefox 54.0 中使用 10 分钟延迟服务作为后端进行了一些实验。

经过一些测试将客户端上的超时设置为 10 分钟后,我在两个浏览器中 300 秒(5 分钟)后收到了文本状态为“错误”的错误响应,因此至少对于这两个浏览器,无法覆盖内部超时价值。我假设市场上其余浏览器的行为相同。

我的测试脚本:(vanilla JavaScript 的类似结果)

var st = new Date();  
  $.ajax({
      url: "https//mysitewith10minresponse.com/foobar",
      type: "GET",
      dataType: "json",
      timeout: 600000, 
      success: function(response) { console.log(response); },
      error: function(jqXHR, textStatus, errorThrown) {           
          st = (new Date() - st)/1000;
          alert("Text Status " + textStatus + ", diff: " + st + " seconds");          
      }
  });
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是答案的基本部分,但我不清楚你的意思:“300 秒 = 2 分钟”?您能再检查一下吗? (2认同)