假设我有一个长时间运行的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可能?)会告诉我发生的错误只是过程被中断所以我可以知道忽略错误?
谢谢!
答案 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!");
}
}