在纯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分钟)后都出现了文本状态为“错误”的错误响应,因此至少对于这两个浏览器而言,无法覆盖内部超时值.对于市场上其余的浏览器,我假设行为相同.
我的测试脚本:(与原始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");
}
});