Php 如何在卸载之前执行ajax函数?
我正在开发一个php/javascript聊天 当用户登录时,他/她的用户名被插入名为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设置
队列的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