jquery ajax失败请求未触发完整或错误处理程序

时间:2011-01-27 22:22:50

标签: javascript ajax

我正在进行这样的ajax调用:

var requestData = function() {
    $.ajax({
        dataType: 'jsonp',
        jsonp: 'js',
        url: "http://someServer", 
        success: function (data) {
            // do stuff with data
        },
        complete : function(data) {
            // try again in 5 seconds
            setTimeout(requestData, 5000);
        }
    });
};

一切都很好,并且它有效,除了:服务器有点不稳定,并且有时无法返回响应。这很好,但是当发生这种情况时,完整的处理程序永远不会触发。我也尝试过使用错误处理程序。我还能做些什么吗?我已经考虑过使用setInterval了,但是我真的宁愿在这之后做下一个,而不是在他们可能堆积的时间......

更新:当服务器出现故障时,我在chrome的控制台中收到“无法加载资源”。

1 个答案:

答案 0 :(得分:0)

问题是JSONP的工作原理是将一个script标记插入到DOM中,而不是通过XMLHTTPRequest。 script标记没有onerror属性,因此您无法通过传统方法测试成功。唯一的方法是通过超时。

这样的事可能有用:

var requestComplete = {};
var requestData = function() {
    var now = (new Date()).getTime();
    requestComplete[now] = false;
    $.ajax({
        dataType: 'jsonp',
        jsonp: 'js',
        url: "http://someServer", 
        success: function (data) {
            requestComplete[now] = true;
            // do stuff with data
        }
    });
    setTimeout(function() {
        if (!requestComplete[now]) {
            setTimeout(requestData, 5000); // try again in 5 seconds
        }
    }, 5000); // give the JSONP request 5 seconds to work
};