Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在卸载之前执行ajax函数?_Php_Javascript_Jquery_Onbeforeunload - Fatal编程技术网

Php 如何在卸载之前执行ajax函数?

Php 如何在卸载之前执行ajax函数?,php,javascript,jquery,onbeforeunload,Php,Javascript,Jquery,Onbeforeunload,我正在开发一个php/javascript聊天 当用户登录时,他/她的用户名被插入名为队列的MySQL表中。 此insert返回将存储在名为$\u session['CHAT\u QUEUE\u id']的会话变量中的mysql\u insert\u id() 我需要在用户关闭页面时删除MySQL表行 我尝试了以下方法,但没有成功: js文件 chat.php 有什么方法可以做到这一点吗?启动ajax异步(jquery-ajax的默认设置)。但是浏览器不会在卸载时等待任何东西 尝试在ajax设置

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

当用户登录时,他/她的用户名被插入名为
队列的MySQL表中。
此insert返回将存储在名为
$\u session['CHAT\u QUEUE\u id']的会话变量中的
mysql\u insert\u id()

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

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

js文件

chat.php

有什么方法可以做到这一点吗?

启动ajax异步(jquery-ajax的默认设置)。但是浏览器不会在卸载时等待任何东西

尝试在ajax设置中设置
async:false
。但你永远也不能确定每次都能在所有浏览器中使用

请参见此处的评论:

您是否意识到浏览器对
onbeforeunload
的支持是有限的?歌剧院不支持它,我没想到。有什么建议吗?通常的方法是定义一个超时。如果用户在一段特定的时间内没有进行任何活动,他就会断开连接。它工作得非常好。我早该想到的。。。谢谢另外-如果您正在触发异步使用的同一个功能性ajax调用(或许多ajax调用),则可以在onbeforeunload语句中将它们设置为全局异步:$.ajaxSetup({async:false});设置async=false重置为async=true的一个有用的后续步骤:您知道为什么必须将其设置为同步吗?因为我们想要的是将数据发送到服务器,但不关心服务器响应,因为数据已传递?
window.onbeforeunload = closeSession;
function closeSession(){
    $.ajax({
        url: "/chat/process/chat.php",
        type: "GET"
    });
    return "disconnected";
}
$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID'];
// query, etc