我可以保证onreadystatechange最终总是会被readyState == 4调用吗?

时间:2011-09-02 01:36:58

标签: javascript xmlhttprequest

我在嵌入式设备上使用XMLHttpRequest,它为API提供了非标准扩展,允许在请求完成后手动清理资源。

我可以假设,对于所有情况(成功或其他情况,例如404,DNS查找失败等),对send()方法的调用最终将导致使用readyState == 4调用我的onreadstatechange处理程序吗? / p>

或者,换句话说,假设此实现的XHR在所有其他方面的行为与标准浏览器的行为类似,以下代码是否总会导致调用destroy()方法?

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
        callback(xhr.responseText);
        if (xhr.destroy) { // must call this to prevent memory leak
            xhr.destroy();
        }
    }       
};
xhr.open(method, url, true);
xhr.send(null);

1 个答案:

答案 0 :(得分:3)

没有

在某些情况下,例如在调用abort()时,州可能会在UNSENT(3.6.5)处终止。

即使在“正常”操作期间,如果发生错误并抛出异常,则状态可能会以DONE以外的其他内容终止。

阅读the spec's section on states了解详情。