这篇文章来自 Doug Turner,他之前写过关于 地理位置 的文章。Doug 参与 Mozilla 的 移动 项目。
XMLHttpRequests (XHR) 可以是同步的或异步的。虽然大多数人使用异步请求,但在某些情况下您可能希望使用同步请求。也就是说,等待 XMLHttpRequest 调用完成才能继续执行 JavaScript。在 Firefox 3 及更早版本中,浏览器在同步 XHR 请求期间仍会触发计时器事件并响应输入事件。在 Firefox 3.5 及更高版本中,鼠标移动和超时等输入事件将暂停,直到同步请求完成。这允许同步请求阻塞。
例如
function hello() {
alert(“hello”);
}
setTimeout(hello, 20);
var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', false);
req.send(null);
在 Firefox 3.5 之前,无法确定“hello”函数是在 XHR 请求期间还是之后被调用。这导致在使用同步 XHR 请求的 Web 应用程序中出现各种计时问题。
此问题的解决方案是将输入事件和超时延迟到“req.send”返回之后。
10 条评论