检测XMLHttpRequest何时连接

时间:2011-08-16 19:05:21

标签: javascript xmlhttprequest xmlhttprequest-states

我正在尝试检测长时间运行的XMLHttpRequest实际连接到服务器的时间。

现在,当我收听readystatechange事件时,它只会在请求完成时触发。我的测试服务器发送标头和一些数据,经过很长的超时(10秒)后,它完成了请求。 XHR仅在最后触发事件,然后它为背后的每个状态执行一次:HEADERS_RECEIVED,LOADING,DONE。

这是我的浏览器代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function(evt) {
    console.log('Request is now in state ' + xhr.readyState);

    if(xhr.readyState === xhr.HEADERS_RECEIVED) {
        console.log('Request has started');
    }
    if(xhr.readyState === xhr.DONE) {
        console.log('Request is finished');
    }
};
xhr.send(null);

如何检测标题何时被收到?我假设我无法检测请求何时开始,基于API中的可用内容。

到目前为止,我已经提出以下建议:

  • 将请求方法设置为POST
  • 在请求打开时发送一些数据,例如xhr.send('something')
  • 收听xhr.upload.onload回拨

像这样:

xhr.upload.onload = function(evt) {
    console.warn('Request has started');
};

这仅适用于Firefox和Safari。不是Chrome或IE。

1 个答案:

答案 0 :(得分:2)

XMLHttpRequest对象有5个就绪状态

  • 0 =未初始化
  • 1 =正在加载
  • 2 =已装载
  • 3 =互动
  • 4 =完成

您只是在代码中检查其中两个。此外,您应该使用else if来提高效率。