当jQuery ajax超时时,我想运行一个函数

可能重复:
jquery $ .ajax超时设置

超时有效,但是当超时发生时,我想执行一个函数。 你有什么想法怎么做?

$.ajax({ type: "GET", url: "xajax.php", timeout: 100, data: "name=John&location=Boston", success: function(msg) { alert( "Data Saved: " + msg ); } }); 

使用完整:

请求完成时要调用的函数(执行成功和错误回调之后)。 该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest)对象和一个字符串,用于对请求的状态进行分类(“成功”,“未修改”,“错误”, “超时” ,“中止”或“parsererror”)。 从jQuery 1.5开始,完整的设置可以接受一系列函数。 每个函数将依次调用。 这是一个Ajax事件。

或错误:

请求失败时要调用的函数。 该函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象,描述发生的错误类型的字符串和可选的exception对象(如果发生)。 第二个参数的可能值(除了null)是“timeout” ,“error”,“abort”和“parsererror”。 发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“未找到”或“内部服务器错误”。 从jQuery 1.5开始,错误设置可以接受一系列函数。 每个函数将依次调用。 注意:不会为跨域脚本和JSONP请求调用此处理程序。 这是一个Ajax事件。

以下是使用complete的示例:

  $.ajax({ type: "GET", url: "xajax.php", timeout: 100, data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); }, complete: function(jqXHR, textStatus) { if (textStatus == "timeout") { alert('timeout'); } } }); 

超时将作为错误的一部分抛出,您可以检查错误原因是否超时并在那里调用您的函数!

error handling程序的三个参数是xmlhttprequest,textstatus和message。 发生超时时,状态arg将为“超时”。

 $.ajax({ type: "GET", url: "xajax.php", timeout: 100, data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); } error: function(xmlhttprequest, textstatus, message) { if(textstatus==="timeout") { alert("Timeout happened"); //run function here! } else { alert(textstatus); } } });​ 

textstatus可能值是(忽略null)“timeout”,“error”,“notmodified”和“parsererror”。

相关文档位于http://api.jquery.com/jQuery.ajax/

看看完整的function

http://api.jquery.com/jQuery.ajax/

complete(jqXHR,textStatus)请求完成时要调用的函数(执行成功和错误回调之后)。 该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest)对象和一个字符串,用于对请求的状态进行分类(“成功”,“未修改”,“错误”,“超时”,“中止”或“parsererror”)。 从jQuery 1.5开始,完整的设置可以接受一系列函数。 每个函数将依次调用。 这是一个Ajax事件。

 $.ajax({ type: "GET", url: "xajax.php", timeout: 100, data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); }, complete: function(jqXHR, textStatus) { if (textStatus === "timeout") { alert("timeout"); } }