我试图检测长时间运行的 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。