我发布ajax请求以获取用户详细信息。有时,当我执行请求时,我将响应状态设置为0(尝试加载资源时出错)但大多数时候我从服务器获得有效响应对于同一个url.I已经阅读了几个关于我的问题的帖子,并且所有声明的是“当你将跨域状态返回为0时”,但这不是我的情况,因为我从同一个域提出请求。
每当我获得状态为0时,ajax发送事件都不会被触发。有没有人遇到过这种问题?是否与safari浏览器有关?它似乎在chrome和firefox中工作正常。提前谢谢
答案 0 :(得分:1)
我在过去使用基于webkit的浏览器时遇到过这个问题。在Web服务器上启用失败的请求跟踪后,我发现该请求甚至没有从浏览器发送。在Web浏览器中启用详细调试指出了浏览器本身的错误。面对浏览器中的一个突出错误,我终于找到了以下解决方案。
如果从浏览器返回的状态代码为0,此代码将重试ajax请求。在所有其他方面,它将像jQuery的ajax函数一样运行。您可以配置代码重新尝试发送请求的次数。
function AjaxRetry(settings, maxTries, interval) {
var self = this;
this.settings = settings;
this.maxTries = typeof maxTries === "number" ? maxTries : 0;
this.completedTries = 0;
this.interval = typeof interval === "number" ? interval : 0;
return tryAjax().promise();
function tryAjax(deferred) {
var d = deferred || $.Deferred();
$.ajax(self.settings)
.done(function (data, textStatus, xhr) {
self.completedTries += 1;
d.resolve(data, status, xhr);
self.done = true;
})
.fail(function (xhr, textStatus, error) {
self.completedTries += 1;
var attemptRetry = false;
// Added in an attempt to handle the ajax errors that appear to be a flaw in the Intermec HTML5 Browser.
// Example error in browser debug log: Curl ERROR: Failed sending data to the peer for url
// This appears to be CURLE_SEND_ERROR (55) - Failed sending network data. https://curl.haxx.se/libcurl/c/libcurl-errors.html
// This code will retry any ajax requests that fail due to the HTML5 browser CURL error
if (typeof (xhr) !== 'undefined' && typeof (textStatus) !== 'undefined' && typeof (error) !== 'undefined') {
if (xhr.readyState === 0 && xhr.responseJSON === undefined && xhr.status === 0 && xhr.statusText === 'error') {
attemptRetry = true;
}
}
if (self.completedTries < self.maxTries && attemptRetry === true) {
//console.log("Waiting " + interval + "ms before retrying...");
setTimeout(function () {
tryAjax(d);
}, self.interval);
} else {
d.reject(xhr, textStatus, error);
}
});
return d;
}
}