我希望浏览器在发送ajax请求之前保持页面的打开状态。我想象中的效果是这样的:
var requestsPending = 0;
window.onbeforeunload = function() {
showPleaseWaitMessage();
while(requestsPending > 0);
}
// called before making ajax request, atomic somehow
function ajaxStarted() {
requestsPending++;
}
// called when ajax finishes, also atomic
function ajaxFinished() {
requestsPending--;
}
很遗憾,JS不支持多线程。据我理解,回调函数(ajaxFinished)可能永远不会被执行,因为浏览器会尝试等待while循环结束才执行它,从而导致无限循环。
该怎么做才是正确的呢?也许有一种方法可以强制JS评估其待办事项清单中的下一步,然后再返回while循环?或者某种"加入"ajax调用的语法?我正在使用DWR进行我的ajax。
谢谢, -Max
beforeunload
还是unload
?因为在beforeunload
中,如果我愿意,我可以启动像alerts
这样具有侵入性的东西。虽然我已经很久没有在beforeunload
中进行这种请求发送了(因为我认为这不是一个好主意),但是当我几年前这样做时,它在 IE6、IE7 和 Firefox... 嗯...几年前的 Firefox 中可以可靠地工作。 :-) - T.J. Crowder