似乎可以在纯 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/