如何在onbeforeunload上执行ajax函数?
Posted
技术标签:
【中文标题】如何在onbeforeunload上执行ajax函数?【英文标题】:How to execute ajax function onbeforeunload? 【发布时间】:2012-03-30 21:34:11 【问题描述】:我正在开发一个 php/javascript 聊天。
当用户登录时,他/她的用户名被插入到名为queue
的 mysql 表中。
此插入返回mysql_insert_id()
,该mysql_insert_id()
将存储在名为$_SESSION['CHAT_QUEUE_ID']
的会话变量中
我需要在用户关闭页面时删除 MySQL 表行。
我尝试了以下方法,但没有成功:
js 文件
window.onbeforeunload = closeSession;
function closeSession()
$.ajax(
url: "/chat/process/chat.php",
type: "GET"
);
return "disconnected";
chat.php
$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID'];
// query, etc
有什么办法吗?
【问题讨论】:
您知道浏览器对onbeforeunload
的支持是有限的吗?例如。 Opera 不支持。
我没有想到这一点。有什么建议吗?
常用的方法是定义一个超时时间。如果用户在特定时间内没有活动,他就会断开连接。
【参考方案1】:
你触发你的 ajax 异步(默认为 jquery - ajax)。但浏览器不会等待卸载任何内容。
尝试在 ajax 设置中设置 async : false
。但是您永远无法确定这是否每次都适用于所有浏览器。
在此处查看评论: http://api.jquery.com/unload/#dsq-comment-body-132164390
【讨论】:
完美运行。之前应该想到的...谢谢! 另外——如果你触发了与异步使用相同的功能性 ajax 调用(或多个 ajax 调用),你可以在 onbeforeunload 语句中将它们全局设置为异步:$.ajaxSetup( async:假); 关于将 async=false 重置为 async=true 的有用后续操作:***.com/a/4651049/449444 你知道为什么我们必须将其设置为同步吗?因为我们想要的是向服务器发送数据但不关心服务器响应,因为数据已传递?以上是关于如何在onbeforeunload上执行ajax函数?的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中的 window.onbeforeunload ajax 请求