当请求因浏览器重新加载而失败时,jQuery$.ajax调用成功处理程序
我有以下代码:当请求因浏览器重新加载而失败时,jQuery$.ajax调用成功处理程序,jquery,ajax,error-handling,Jquery,Ajax,Error Handling,我有以下代码: $.ajax({ type: "POST", url: url, data: sendable, dataType: "json", success: function(data) { if(customprocessfunc) customprocessfunc(data); },
$.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在完全重新加载时中止请求,或者至少不调用我的success函数?我无法在成功处理程序中知道为什么数据为空-它是来自服务器的空数据还是由于重新加载而中止了调用 Stats奇怪的是,如果呼叫失败,您将收到“成功”。。但您可以尝试通过Listening to complete事件来覆盖该行为(这里只是复制粘贴我的测试框架中的代码)
结果是XMLHttpRequest对象,因此您可以分析它的实际状态并决定是否继续。您可以在页面上使用
onbeforeunload
事件:将它链接到一个函数,该函数将清除所有AJAX请求。onbeforeunlaod技术不适用于定期刷新页面(例如,每半秒一次)。我发现,通过将错误处理过程延迟一小段时间,可以避免刷新页面所导致的错误
例如:
$.ajax(...)
.success(...)
.error(function(jqXHR) {
setTimeout(function() {
// error showing process
}, 1000);
});
除此之外
window.onbeforeunload=函数(){//停止ajax调用}
事件可用于不太频繁的刷新ajax调用。您使用的是哪个版本的jQuery?状态为
0
被视为“成功”以适应Opera错误…但在jQuery 1.4.3 IIRC中已删除。注意:这不适用于
$.ajax(...)
.success(...)
.error(function(jqXHR) {
setTimeout(function() {
// error showing process
}, 1000);
});