【问题标题】:suppress confirmation dialog while using onbeforeunload使用 onbeforeunload 时禁止确认对话框
【发布时间】:2014-12-17 03:44:42
【问题描述】:

我正在使用 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 ; 而不是 return false; 。但这也行不通。

【问题讨论】:

  • return null; 是否符合您的要求?
  • 返回空值;没有显示对话框,也没有向服务器发送 ajax 调用。
  • 这可能是因为您在 Ajax 调用之后调用了 return。请记住,您的 Ajax 调用默认是异步的,因此 return 将在 Ajax 调用完成之前被调用。在您的 Ajax 调用设置中传递 async: false ,您可以删除 done 函数。然后,在同步 Ajax 调用完成之前,您不应点击 return null。
  • 使 async:false 工作。谢谢
  • 酷,请随时将我的答案标记为下面的正确答案,以供未来的观众观看。

标签: javascript jquery onbeforeunload


【解决方案1】:

根据我在原帖中的 cmets,答案是通过在 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;
}

【讨论】:

    【解决方案2】:

    当用户关闭页面时,文档已失效,脚本已失效。您希望脚本在它们关闭后运行。现在,如果选项卡没有关闭,感觉就像它在等待您的功能完成时被冻结。意思是不可能的。我相信这就是你想要的?清理请求不会发送,因为文档已关闭。

    【讨论】:

    • 目前使用上面的代码,清理请求正在发送,因为它是在卸载之前。但它显示了用户是否要离开页面的确认对话框。我不希望显示该对话框。
    • 如果您没有弹出窗口,则不会发送清理请求,因为弹出窗口会阻止文档关闭和执行您的清理请求
    猜你喜欢
    • 2017-08-16
    • 2014-11-26
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2016-07-29
    • 2010-12-25
    相关资源
    最近更新 更多