如何在onbeforeunload上执行ajax函数?

IT技术 php javascript jquery onbeforeunload
2021-02-02 16:04:57

我正在开发一个 php/javascript 聊天。

当用户登录时,他/她的用户名被插入到名为 的 MySQL 表中queue此插入返回mysql_insert_id()将存储在名为$_SESSION['CHAT_QUEUE_ID']

我需要在用户关闭页面时删除 MySQL 表行。

我尝试了以下方法,但没有成功:

js文件

window.onbeforeunload = closeSession;
function closeSession(){
    $.ajax({
        url: "/chat/process/chat.php",
        type: "GET"
    });
    return "disconnected";
}

聊天.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID'];
// query, etc

有没有办法做到这一点?

1个回答

您触发 ajax 异步(jquery 的默认设置 - ajax)。但是浏览器不会等待任何卸载。

尝试async : false在 ajax-settings 中设置。但是您永远无法确定这每次都适用于所有浏览器。

请参阅此处的评论:http : //api.jquery.com/unload/#dsq-comment-body-132164390

它完美地工作。之前应该想到这一点......谢谢!
2021-03-20 16:04:57
此外 - 如果您正在触发异步使用的相同功能 ajax 调用(或多个 ajax 调用),您可以在 onbeforeunload 语句中将它们设置为全局异步: $.ajaxSetup({ async: false });
2021-03-23 16:04:57
你知道为什么我们必须将它设置为同步吗?因为我们想要的是将数据发送到服务器但不关心服务器响应,因为数据已传递?
2021-03-24 16:04:57
一个有用的后续设置 async=false 重置为 async=true:stackoverflow.com/a/4651049/449444
2021-04-06 16:04:57