AJAX和用户离开页面

我正在进行聊天,我正在试图弄清楚我是如何检测用户是否离开了页面。 几乎所有东西都由数据库处理,以避免前端搞乱。

所以我想要做的是一旦页面因任何原因被关闭(窗口关闭,转到另一个页面,点击链接等),ajax调用将在一个人离开之前被触发,因此我可以更新数据库。

这就是我尝试过的:

$(window).unload(function(){ $.post("script.php",{key_leave:"289583002"}); }); 

由于一些奇怪的原因,它不会工作,我已经检查了PHP代码,它工作正常。 有什么建议?

试试这个:

 $(window).unload(function(){ $.ajax({ type: 'POST', url: 'script.php', async:false, data: {key_leave:"289583002"} }); }); 

请注意async:false ,浏览器会等待请求完成。

使用$.post是异步的,因此在浏览器停止执行脚本之前,请求可能不够快。

这不是正确的方法…假设操作系统只是挂起或在浏览器进程中发生了某些事情,那么此事件将不会被触发。 而且,您永远不会知道用户何时离开,在他/她断开连接后显示他/她的在线状态。 而不是这个,你可以做的是。

  1. 尝试连接套接字,以便在断开套接字时可以知道用户已断开连接
  2. 您可以向服务器发送请求(例如每1秒后发送一次),以便您可以知道用户仍处于连接状态。 如果您没有收到请求 – 即使在2秒后 – 断开用户连接。

尝试在$ .post之后添加弹出窗口(提示(“离开这么早?”))。 它可能会奏效。 这可能是糟糕的用户体验。 🙂

这与上面的答案有关。 https://stackoverflow.com/a/10272651/1306144

这将每1秒执行一次ajax调用。 (1000)

 function callEveryOneSec() { $jx.ajax({}); // your ajax call } setInterval(callEveryOneSec, 1000);