当请求因浏览器重新加载而失败时,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);
});