如何在onbeforeunload上执行ajax函数?

mat*_*uno 10 javascript php jquery onbeforeunload

我正在开发一个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";
}
Run Code Online (Sandbox Code Playgroud)

chat.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID'];
// query, etc
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Sti*_*rBF 19

你激活你的ajax异步(jquery - ajax的默认值).但浏览器不会在卸载时等待任何事情.

尝试async : false在ajax 设置中进行设置.但是你永远无法确定这是否适用于所有浏览器.

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

  • 另外 - 如果要触发异步使用的相同功能ajax调用(或许多ajax调用),可以在onbeforeunload语句中将它们全局设置为async:$ .ajaxSetup({async:false}); (2认同)