在使用onbeforeunload时抑制确认对话框

6

我正在使用onbeforeunload事件发送ajax请求来执行一些清理任务。

当我使用onbeforeunload时,它会在关闭选项卡时显示确认对话框。我想要的是不显示任何确认对话框,只需发送清理请求。以下是我正在使用的脚本。

    window.onbeforeunload = unloadFunction;
    function unloadFunction() {
        var test_id = $('#test_id').val();

        jQuery.ajax({
            url: "/test/cleanup/" + test_id,
            cache: false
        }).done(function () {
            return false;
        });
        return false;
    }

有没有办法可以抑制确认对话框?

根据一些建议,我尝试将返回语句更改为return ;而不是return false;。但这也不起作用。


return null; 是否符合您的需求? - Delorian
return null;没有显示对话框,也没有将Ajax调用发送到服务器。 - Niraj Chapla
1
这可能是因为您在Ajax调用之后调用了return。请记住,您的Ajax调用默认情况下是异步的,因此该return将在Ajax调用完成之前被调用。在您的Ajax调用设置中传递async: false,您可以删除done函数。然后,在同步Ajax调用完成之后再调用return null。 - Delorian
1
使async:false生效了。谢谢。 - Niraj Chapla
很好,随意将我下面的答案标记为正确答案,以供未来查看。 - Delorian
2个回答

2
根据我在原帖上的评论,答案是通过在Ajax调用设置中添加“ async: false”使调用同步,将最后的“ return false”更改为“ return null;”,并删除done函数。
window.onbeforeunload = unloadFunction;
function unloadFunction() {
    var test_id = $('#test_id').val();

    jQuery.ajax({
        url: "/test/cleanup/" + test_id,
        cache: false,
        async: false
    });

    return null;
}

1
当用户关闭页面时,文档和脚本都会被终止。你期望脚本在他们关闭后仍然运行。现在,如果选项卡没有关闭,它会感觉像是冻结了,等待函数完成。这意味着这是不可能的。我相信这就是你想要的吗?清理请求不会发送,因为文档已关闭。

1
目前使用上述代码,清理请求是在卸载之前发送的。但它会显示确认对话框,询问用户是否要离开页面。我不想显示该对话框。 - Niraj Chapla
如果您没有弹出窗口,清理请求将无法发送,因为弹出窗口是防止文档关闭并执行清理请求的原因。 - Edwin Reynoso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接