为Ajax设置超时(jQuery)
$.ajax({ url: "test.html", error: function(){ //do something }, success: function(){ //do something } });
有时候success
function很好,有时候不行。
如何为这个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参数,可以看到发生了什么types的错误。 选项有“超时”,“错误”,“中止”和“parsing错误”。
下面是一些示例,演示如何在jQuery的新旧范例中设置和检测超时。
现场演示
承诺与jQuery 1.8 +
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)对象,一个描述发生的错误types的string,以及一个可选的exception对象(如果发生的话)。 第二个参数(除了null)的可能值是“超时”,“错误”,“中止”和“parsing错误”。 发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,如“未find”或“内部服务器错误”。 从jQuery 1.5开始,错误设置可以接受一组函数。 每个函数都会依次调用。 注意:此处理程序不会被调用用于跨域脚本和JSONP请求。
src: http : //api.jquery.com/jQuery.ajax/
你可以使用像这样的ajax选项的timeout
设置:
$.ajax({ url: "test.html", timeout: 3000, error: function(){ //do something }, success: function(){ //do something } });
阅读所有有关这里的ajax选项: http : //api.jquery.com/jQuery.ajax/
请记住,发生超时时, error
处理程序被触发,而不是success
处理程序:)
使用全function的.ajax
jQueryfunction。 比较与https://stackoverflow.com/a/3543713/1689451为例。;
没有testing,只是将您的代码与引用的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); } } });