如何判断JQuery的错误意味着通话被中断

问题描述:

假设我有一个稍微长时间运行的jQuery Ajax调用(比如5秒)如下:如何判断JQuery的错误意味着通话被中断

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     alert('Error!'); 
    } 
}); 

现在假设在等待我的五个第二个进程运行用户越来越不耐烦,决定在我的页面上点击某种导航。上述调用会发生什么情况是用户在点击链接时收到错误警报。

如果确实存在错误,我确实希望显示错误警报,但如果发生的只是用户决定导航,我不希望显示错误警报。我怎样才能做到这一点?

换句话说,是否有一些值我可以检查(xhr.status也许?),它会告诉我发生的错误只是过程中断,所以我可以知道忽略错误?

谢谢!

+1

检查错误回调的第二个和第三个参数。 – 2013-03-04 23:00:52

+0

第二个参数是“错误”。第三个说法是“”。根据我所能说的,在这种情况下,这两者都不是有用的。 – 2013-03-04 23:59:16

+0

在这种情况下,查看第一个参数的属性。 – 2013-03-05 00:01:32

尽可能靠近我可以告诉大家,要做到这一点,最好的办法是检查xhr.readyState你错误处理器。任何小于4的值都表示该进程仍在运行,这意味着浏览器正在发生中断它的事情。

您还想调用xhr.abort()来尝试停止ajax进程,以便用户在导航实际发生之前不必等待它完成,但对于我调用xhr.abort( )实际上并没有加快速度。

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     if (xhr.readyState < 4) { 
      xhr.abort(); 
     } 
     else { 
      alert('Error!'); 
     } 
    } 
}); 

documentation,我会大胆地猜测你的错误处理程序应该是这样的:

error(xhr, textStatus, errorThrown) { 
    if(textStatus != "abort") { 
     alert("Error!"); 
    } 
} 
+0

这就是我的想法,但实际上,如果我检查状态,当错误是中断时,它是“错误”。 – 2013-03-04 23:58:04

+0

'errorThrown'说什么? – 2013-03-04 23:59:18

+0

见上。它是空的字符串。 – 2013-03-05 00:23:37