我正在使用XMLHttpRequest发出异步GET请求。我有
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {//Handle only if the state has completed
if (xhr.status === 200) {
successHandler.call(context, xhr.responseText);
} else {
console.warn('onreadystatechange:' + new Date().getTime());
failureHandler.call(context, xhr.status, xhr.statusText);
}
}
};
xhr.ontimeout = function () {
console.warn('ontimeout: ' + new Date().getTime());
failureHandler.call(context, 0, 'timeout');
};
我正在使用网络限制来强制超时。我观察到在超时的情况下都会调用
onreadystatechange
和ontimeout
回调,onreadystatechange
在ontimeout
之前。我的印象是,只会执行这两者之一。我正在使用Chrome。有人知道这是否可以预期吗? 最佳答案
现代的解决方案是使用适当的XMLHttpRequest事件:如果要分别处理这些情况,则使用onload和onerror,如果希望不管成功与否都检测HTTP请求完成,则使用onloadend,并使用ontimeout超时。发生超时时,将调用ontimeout,但不会调用onloadend。 onreadystatechange看起来最好让它安静地死掉。完整的事件集可以在这里找到:
http://www.w3.org/TR/XMLHttpRequest/#events
由于onreadystatechange→ontimeout序列似乎不影响IE 8,因此我很高兴执行以下操作:在IE 8中使用onreadystatechange,并在Firefox /现代MSIE中使用onloadend(使用以下测试来查看事件是否定义为:if(httpObj中的“onloadend”)...)。
这是一个内部系统,所以对我来说足够了。对于OP,可能需要更多测试。
关于javascript - XMLHttpRequest超时情况-onreadystatechange在ontimeout之前执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23940460/