我正在进行这样的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的控制台中收到“无法加载资源”。
答案 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
};