当请求因浏览器重新加载而失败时,jQuery $ .ajax调用成功处理程序

时间:2010-12-29 10:00:44

标签: jquery ajax error-handling

我有以下代码:

 $.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在完全重新加载时中止请求,或者至少不调用我的成功函数?我无法在成功处理程序中知道数据为空的原因 - 它是否从服务器中清空或由于重新加载而中止调用。

3 个答案:

答案 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调用。