beforeunload中的ajax会可靠地执行吗?

Will ajax in beforeunload reliably execute?

本文关键字:执行 中的 ajax beforeunload      更新时间:2023-09-26

我有一个HTML5应用程序,需要在用户更改/刷新页面时发送一个断开连接的ajax请求。我目前正在使用这个代码:

window.addEventListener("beforeunload", function(event) {
    $.ajax({
        url: api_disconnect,
        data: { identifier: token },
        method: "GET"
    });
});

我不需要处理响应,甚至不需要确保浏览器收到响应。我的问题是,我可以依赖服务器接收请求吗?

如果没有,我该如何完成呢?目前,我让应用程序每15秒发送一次"我还活着!"请求(这已经感觉太多了)。我希望服务器在用户断开连接的那一刻就知道。

澄清一下,我知道如果浏览器/电脑崩溃了,我无能为力。这就是心跳的作用。我的意思是在一个正常的用例中,当用户关闭/更改/刷新页面时。

您不能100%依赖ajax调用通过。您可以测试许多浏览器和操作系统,并确定哪些浏览器和操作系统通常会在页面被删除之前收到ajax调用,但任何规范都不能保证这样做。

您正在使用的心跳是最常见的解决方案。这也将覆盖您的网络连接丢失或关机或计算机睡眠模式或浏览器崩溃,beforeunload处理程序不会。

我看到的另一种解决方法是使用套接字。IO连接到服务器。从套接字开始。io连接有一个小的,非常有效的心跳,服务器会看到套接字关闭,当页面关闭时,你会得到两全其美,因为你会看到一个异常的关闭通过心跳,你会看到一个正常的关闭立即通过webSocket连接关闭。