我有以下代码:
$.ajax({
type: "POST",
url: url,
data: sendable,
dataType: "json",
success: function(data) {
if(customprocessfunc)
customprocessfunc(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
// error handler here
}
});
我有一个定时器,可以经常发出AJAX请求。如果我没有收到“数据”中的任何内容,我会向用户显示一条错误消息 - 这意味着服务器上出现了问题。
问题是当用户在AJAX调用过程中重新加载页面时。我可以在Firebug中看到AJAX调用失败(URL显示为红色且未显示HTTP状态)所以我希望jQuery将停止请求或至少转到错误处理程序。但它转到成功处理程序并在'data'变量中传递null。
因此,当用户重新加载页面时,有时他可以看到关于未知错误的大红色消息(因为数据为空)。
有没有办法让jQuery在完全重新加载时中止请求,或者至少不调用我的成功函数?我无法在成功处理程序中知道数据为空的原因 - 它是否从服务器中清空或由于重新加载而中止调用。
答案 0 :(得分:2)
您可以在页面上使用onbeforeunload
事件:将其链接到清除所有AJAX请求的函数。
答案 1 :(得分:1)
统计数据很奇怪你在接到电话失败的情况下收到'成功'。但是你可以尝试通过监听完成事件来覆盖行为(这里只是从我的测试框架中复制粘贴代码)
$.ajax(
{
url: url,
type: type,
processData: false,
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data),
dataType: 'json',
complete: function (result) {
if (result.status == 404) {
ok(false, '404 error');
} else {
callback($.parseJSON(result.responseText));
}
}
});
结果是XMLHttpRequest对象,因此您可以分析它的实际状态并决定是继续还是不继续。
答案 2 :(得分:1)
onbeforeunlaod技术不适用于定期刷新页面(例如每半秒)。我已经发现,通过将错误处理过程延迟一小段时间,可以避免刷新页面引起的错误。
示例:
$.ajax(...)
.success(...)
.error(function(jqXHR) {
setTimeout(function() {
// error showing process
}, 1000);
});
除此之外
window.onbeforeunload = function(){//停止ajax调用}
事件可用于不太频繁刷新ajax调用。