Javascript:等到ajax请求完成关闭页面
作者:互联网
参见英文答案 > JavaScript, browsers, window close – send an AJAX request or run a script on window closing 7个
我希望浏览器保持页面打开,直到发送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.
谢谢,
– 最大
解决方法:
编辑根据您在下面的评论,修改后的答案:
如果要阻止直到先前发起的请求完成,您可以这样做:
window.onbeforeunload = function(event) {
var s;
event = event || window.event;
if (requestsPending > 0) {
s = "Your most recent changes are still being saved. " +
"If you close the window now, they may not be saved.";
event.returnValue = s;
return s;
}
}
然后,浏览器将提示用户询问他们是想要离开页面还是留在页面上,将其置于控制之下.如果他们留在页面上并且提示已经完成请求已经完成,那么下次他们关闭页面时,它会让他们在没有询问的情况下关闭它.
请注意,在现代浏览器中,您的消息不会显示;相反,浏览器将使用通用消息.所以在现代浏览器中,返回任何非空字符串就足够了.尽管如此,您可能希望返回一个有用的字符串(例如上面的代码),以防您的用户使用仍然显示它的过时浏览器.
老答案:
理想情况下,如果可能,您希望避免这样做.
标签:javascript,ajax,dwr 来源: https://codeday.me/bug/20190926/1818657.html