我们的Web应用程序中的一个页面大约每10秒钟对新数据进行轮询,使用jQuery的ajax()
方法。我们通常有几百个用户同时查看此页面,因此我们的服务器每秒接收几个请求。负载不是任何问题。jQuery ajax()调用偶尔会导致XmlHttpRequest响应状态为0的错误
对于我们访问者的一小部分,jQuery ajax()
调用非常触发它是错误事件。这些错误事件中的大部分都是明显的错误(例如访问者遇到网络问题时的超时),但是这些错误事件中的一小部分我很难找到原因,而且我有点困惑。
我们连线了一个全球性的错误监听像这样
$.ajaxSetup({
timeout: oursettings.timeout,
error: function(xhr, status, e){
// error handling goes here
}
});
错误的这个特定子集,jQuery是扔我们的"error"
一个status
。当XmlHttpRequest readystate的值为4
(意味着它是DONE
)并且HTTP响应状态在成功值之外(< 200
或>= 300
)时,通过jQuery source code(特别是第3574行)读取错误仅以此值抛出。 。
但是,当我们检查XmlHttpRequest对象本身时,我们发现它的(HTTP响应)状态为0
。根据XHR规范,当the "error flag is true"时应设置为0的状态。
这是我得到真的很困惑,但因为the only other thing这对“错误标志”的XmlHttpRequest的规范状态是
完成状态具有指示某种类型的网络错误或相关联的错误标志流产。它可以是真或假,并具有假的初始值。
该规范没有说明什么属性或这个错误标志保留在哪里(即它是否可用xhr.error
?)。
所以我想我的问题归结为:这将是正确的我们的Ajax的错误处理代码假设击中我们的错误处理程序与"error"
一个jQuery状态和0
一个xhr.status
任何事件所引起只有通过“network error or abortion”?
是否有任何其他条件或任何其他人已经看到可能导致XmlHttpRequest readystate为DONE (4)
的HTTP响应状态为0?我希望能够排除服务器端错误的任何可能性(因为我们的服务器端日志没有显示任何内容),并且改变错误处理逻辑以不将这种情况视为致命错误(导致用户看到一堆大红色警报类型的错误消息)。
还有更多,请参阅http://stackoverflow.com/a/14507670/700206 – Lee