编程语言
首页 > 编程语言> > Javascript:等到ajax请求完成关闭页面

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;
    }
}

然后,浏览器将提示用户询问他们是想要离开页面还是留在页面上,将其置于控制之下.如果他们留在页面上并且提示已经完成请求已经完成,那么下次他们关闭页面时,它会让他们在没有询问的情况下关闭它.

请注意,在现代浏览器中,您的消息不会显示;相反,浏览器将使用通用消息.所以在现代浏览器中,返回任何非空字符串就足够了.尽管如此,您可能希望返回一个有用的字符串(例如上面的代码),以防您的用户使用仍然显示它的过时浏览器.

更多关于询问用户是否取消关闭事件herehere.

老答案:

理想情况下,如果可能,您希望避免这样做.

标签:javascript,ajax,dwr
来源: https://codeday.me/bug/20190926/1818657.html