如何判断JQuery错误意味着调用是否中断

时间:2013-03-04 22:56:53

标签: jquery

假设我有一个长时间运行的jQuery Ajax调用(比如5秒),如下所示:

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

现在假设在等待我的五秒钟进程运行时,用户变得不耐烦并决定在我的页面上进行某种导航。上述调用中发生的情况是用户在单击链接时收到错误警报。

如果确实存在错误,我确实希望显示错误警报,但如果发生的一切是用户决定离开,我不希望显示错误警报。我怎么能这样做?

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

谢谢!

2 个答案:

答案 0 :(得分:8)

尽我所知,最好的方法是在错误处理程序中检查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!');
       }
    }
});

答案 1 :(得分:3)

阅读documentation,我猜你的错误处理程序应该是这样的:

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