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

Posted

技术标签:

【中文标题】Ajax:设置超时是不是总是覆盖浏览器的超时?【英文标题】:Ajax: does setting timeout always override the browser's timeout?Ajax:设置超时是否总是覆盖浏览器的超时? 【发布时间】:2014-08-22 22:53:53 【问题描述】:

在纯 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

提前致谢

【问题讨论】:

基于这个morgb.blogspot.de/2014/05/…我猜“至少在Firefox上没有。这个答案声称没有办法覆盖。***.com/questions/1192375/… 你知道AJAX的“完成”、“成功”和“错误”设置吗?我的意思是,当您在请求结束时设置了响应的“完整”设置时,为什么还需要一个 timeOut 函数? @FernandoUrban 是的,我愿意。问题是关于设置相同的超时值而不管浏览器(浏览器的超时)。不是根据超时行事(无论您是在“完成”还是“错误”中执行)。 【参考方案1】:

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

【讨论】:

虽然这是答案的基本部分,但我不清楚你的意思是什么:“300 秒 = 2 分钟”?你能再检查一遍吗?

以上是关于Ajax:设置超时是不是总是覆盖浏览器的超时?的主要内容,如果未能解决你的问题,请参考以下文章

jquery中的ajax方法参数总是记不住,这里记录一下。

ajax响应时长怎样设置?

Ajax请求处理浏览器超时+ PHP长进程

$.ajax()

AJAX

ESXi 6.5 总是会话超时