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

标签 javascript jquery ajax

似乎可以在纯 javascript 中执行 Ajax 请求时设置超时值。见How to detect timeout on an AJAX (XmlHttpRequest) call in the browser?

使用 jQuery 的 ajax 实现和我假设的其他类似框架时也是可能的。见Set timeout for ajax (jQuery)

浏览器似乎对其默认超时有相当模糊的规范。见Browser Timeouts

因此有人可能会说“嘿,我要为我的 ajax 请求设置一个超时时间,这样所有用户都会有相同的超时时间”。

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

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

我怀疑不是。

我还怀疑最好的做法是始终有一个超时错误处理程序,以确保无论发生什么,您都可以显示相关消息,这将为您的支持团队节省工作时间,并为您的公司节省资金。见Determine if $.ajax error is a timeout

提前致谢

最佳答案

这是一个有趣的问题,我在 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");          
      }
  });

关于javascript - Ajax:设置超时是否总是覆盖浏览器的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526201/

相关文章:

javascript - 使用 jQuery,如何选择既不是 A 类也不是 B 类的元素?

javascript - Rails 选择建议和远程数据

javascript - 在启动模式窗口上启动 ajax (ASP.NET MVC)

javascript - 根据内部内容使 iframe 高度动态化- JQUERY/Javascript

javascript - Jquery 顶部导航在滚动条上消失

javascript - Ajax 显示成功,无需在 Internet Explorer 中提交数据

javascript - 动态 ajax 填充表在 IE 8 中不起作用

javascript - 更改 jQuery Mobile 中翻转切换开关中的选项文本

javascript - 输入框未填写所选日期

javascript - 这两种处理顺序 promise 的风格有什么区别