16

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

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

这是我尝试过的:

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

出于某种奇怪的原因,它不起作用,我检查了 php 代码,它工作正常。有什么建议么?

4

4 回答 4

37

试试这个:

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

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

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

于 2012-04-22T22:23:07.717 回答
3

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

  1. 尝试连接一个socket,这样在socket断开的时候就可以知道用户已经断开了
  2. 您可以向服务器发送一个请求(例如每 1 秒后),这样您就可以知道用户仍然处于连接状态。如果您没有收到请求 - 即使在 2 秒后 - 断开用户连接。
于 2012-04-22T22:24:46.783 回答
1

尝试在 $.post 之后添加弹出窗口 (prompt("leaving so early?"))。它可能会起作用。但这可能是糟糕的用户体验。:)

于 2012-04-22T22:13:55.043 回答
-1

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

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

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

setInterval(callEveryOneSec, 1000);
于 2016-06-12T15:19:57.450 回答