我在嵌入式设备上使用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);
答案 0 :(得分:3)
没有
在某些情况下,例如在调用abort()
时,州可能会在UNSENT
(3.6.5)处终止。
即使在“正常”操作期间,如果发生错误并抛出异常,则状态可能会以DONE
以外的其他内容终止。
阅读the spec's section on states了解详情。