Javascript AJAX超时超过2秒不起作用

Javascript AJAX超时超过2秒不起作用,javascript,ajax,Javascript,Ajax,我有这个功能将数据发送到我的(本地主机)服务器。然而,当Wamp意外停止(本地主机服务器关闭)时,我注意到超时不能正常工作 如果我将超时设置为2000毫秒,则回调将正常调用,就像预期的那样。如果设置为4000毫秒,则不会调用超时。相反,readystate将达到4(完成),但并不意味着HTTP状态(零?) 调试过程如下: READY STATE: 2 STATUS: 0 READY STATE: 4 STATUS: 0 这是正常的还是我错过了什么? 我使用Firefox最新版本,53。谢谢

我有这个功能将数据发送到我的(本地主机)服务器。然而,当Wamp意外停止(本地主机服务器关闭)时,我注意到超时不能正常工作

如果我将超时设置为2000毫秒,则回调将正常调用,就像预期的那样。如果设置为4000毫秒,则不会调用超时。相反,readystate将达到4(完成),但并不意味着HTTP状态(零?)

调试过程如下:

READY STATE: 2 STATUS: 0  
READY STATE: 4 STATUS: 0
这是正常的还是我错过了什么? 我使用Firefox最新版本,53。谢谢

function ServerSend(url) {

    var xhr = new XMLHttpRequest();

    // In Internet Explorer, the timeout property may be set only after calling the open() method and before calling 
    // the send() method.

    xhr.open("GET", url, true);
    xhr.timeout = 4000;

    // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState
    // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
    xhr.onreadystatechange = function() {

        if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
              ShowInfo(xhr.responseText)
        }

        // DEBUG
        {
              console.log("READY STATE: "+xhr.readyState+" STATUS: "+xhr.status);
        }

    };


    xhr.ontimeout = function () { 

        xhr.abort();
        alert("Timed out!!!"); 

        //ShowInfo("Server timeout");
    };


    xhr.send();
}

也许你已经找到了一个中间点,让浏览器有时间意识到在另一端没有任何东西在监听,所以从技术上讲,请求正在完成,但处于失败状态,而不是等待响应超时。实际上,在Mozilla文档中,他们说“失败”但是我找不到一个正确检测失败状态的引用。因此,0(零)状态可能意味着失败或“无状态”。失败状态是指有响应但状态不是200(OK)。状态代码未设置是有意义的——它毕竟是来自服务器的状态。在您的情况下,没有服务器。看看其他一些
xhr
属性——可能还有一个与底层请求相关,而不是与响应相关。或者,可能会提供您所需的。嗯,仍然不清楚,但实现了0检查失败(无法访问)和!=200作为服务器故障(并指示确切代码)。谢谢两位。