for (var i = 0; i < 5; ++i) {
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
xhr.open('GET', '/Test/LongOperation?p=' + new Date());
xhr.send('');
}
这只是一个演示(不是实时代码),但它说明了核心问题。
LongOperation
是一种在 10 秒后返回结果的方法。
问题:
为什么在执行上述代码片段后,当用户试图离开页面时,IE8(可能还有其他 IE)会挂起?FireFox/Safari 取消这些请求并允许导航到另一个页面。如果替换
'i < 5'
为,'i < 4'
则 IE 将不会挂起。如何解决这种丑陋的 IE 行为?当他们的浏览器突然挂起时,用户非常沮丧。