$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
有时success
功能运作良好,有时则不然。
如何为这个ajax请求设置超时?例如,3 秒,如果超时,则显示错误。
问题是,ajax 请求会冻结块直到完成。如果服务器宕机了一段时间,它永远不会结束。
$.ajax({
url: "test.html",
error: function(){
//do something
},
success: function(){
//do something
}
});
有时success
功能运作良好,有时则不然。
如何为这个ajax请求设置超时?例如,3 秒,如果超时,则显示错误。
问题是,ajax 请求会冻结块直到完成。如果服务器宕机了一段时间,它永远不会结束。
请阅读$.ajax
文档,这是一个涵盖的主题。
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
您可以通过访问error: function(jqXHR, textStatus, errorThrown)
选项的 textStatus 参数来查看抛出的错误类型。选项是“超时”、“错误”、“中止”和“解析器错误”。
下面是一些示例,演示了在 jQuery 的新旧范式中设置和检测超时。
使用 jQuery 1.8+ 的Promise
Promise.resolve(
$.ajax({
url: '/getData',
timeout:3000 //3 second timeout
})
).then(function(){
//do something
}).catch(function(e) {
if(e.statusText == 'timeout')
{
alert('Native Promise: Failed from timeout');
//do something. Try again perhaps?
}
});
jQuery 1.8+
$.ajax({
url: '/getData',
timeout:3000 //3 second timeout
}).done(function(){
//do something
}).fail(function(jqXHR, textStatus){
if(textStatus === 'timeout')
{
alert('Failed from timeout');
//do something. Try again perhaps?
}
});
jQuery <= 1.7.2
$.ajax({
url: '/getData',
error: function(jqXHR, textStatus){
if(textStatus === 'timeout')
{
alert('Failed from timeout');
//do something. Try again perhaps?
}
},
success: function(){
//do something
},
timeout:3000 //3 second timeout
});
请注意,textStatus参数(或jqXHR.statusText)会让您知道错误是什么。如果您想知道失败是由超时引起的,这可能很有用。
错误(jqXHR,textStatus,errorThrown)
请求失败时调用的函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象、描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“超时”、“错误”、“中止”和“解析器错误”。当发生 HTTP 错误时,errorThrown 接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受函数数组。每个函数都会被依次调用。注意:跨域脚本和 JSONP 请求不会调用此处理程序。
您可以使用timeout
ajax 选项中的设置,如下所示:
$.ajax({
url: "test.html",
timeout: 3000,
error: function(){
//do something
},
success: function(){
//do something
}
});
在此处阅读有关 ajax 选项的所有信息:http : //api.jquery.com/jQuery.ajax/
请记住,当超时发生时,将error
触发处理程序而不是success
处理程序:)
使用全功能的.ajax
jQuery 函数。以https://stackoverflow.com/a/3543713/1689451为例进行比较。
无需测试,只需将您的代码与引用的 SO 问题合并:
target = $(this).attr('data-target');
$.ajax({
url: $(this).attr('href'),
type: "GET",
timeout: 2000,
success: function(response) { $(target).modal({
show: true
}); },
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert(t);
}
}
});
如果您的请求通过 NginX,也不要忘记检查 NginX 设置。
Ajaxoptions.timeout
是一回事,但 nginx 请求超时可能也需要调整。