【问题标题】:How to run POST request when user exits tab or browser?用户退出选项卡或浏览器时如何运行 POST 请求?
【发布时间】:2021-02-26 23:45:49
【问题描述】:

到目前为止我有这个

window.addEventListener("beforeunload", function(e){
      $.post('insert.php', {'postmessage':'CALL bor.update_records_exit(\'' + authUser + '\');'}, function(data) {
            e.returnValue = null;
            return null;
      })
      .fail(function(response) {
            alert('Error: ' + response.responseText);
      });
});

这是有效的,但不可靠。有时请求已发送,有时未发送,我不明白为什么。

我知道这与请求的同步性有关。我尝试改用 .ajax() 并将 async 属性设置为 false,但后来我意识到 async:false 已被弃用。

我需要做的就是在用户关闭浏览器或选项卡时发送最终插入查询...请帮助。

【问题讨论】:

    标签: javascript jquery ajax onbeforeunload sendbeacon


    【解决方案1】:

    async: false 已被弃用是正确的,但是您别无选择,只能在 beforeunload 事件中发出 AJAX 请求时使用它。事实上,它只是它的唯一合法用途。

    这是因为您需要等待请求完成才能允许关闭浏览器。您现在看到的某些请求失败的行为就是出于这个原因;浏览器在请求管道中过早关闭。

    【讨论】:

    • 感谢您的回复。但是,如果它已被弃用,我该如何使用它?有什么方法可以让浏览器等到 POST 请求完成后再关闭?
    • 已弃用并不意味着您不能使用它。这意味着在大多数情况下这不是好的做法,但是在这里你别无选择。 '有什么方法可以让浏览器等到 POST 请求完成后再关闭?' 目前唯一的方法是使用async: false。如果您不想使用该解决方案,则需要重新构建页面,以便在卸载页面时不必更新服务器。
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多