jquery在查看页面时发送心跳

时间:2014-09-13 05:30:31

标签: php jquery ajax

我已经编写了以下Jquery,每3秒钟将一个Heartbeat发送回PHP,它运行正常。我这样做的原因是要了解用户当前登录和使用该网站的内容。

setInterval(function () {
    $.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'});
},3000);

我发现的问题是,当用户不看网站时,它会继续发出心跳 - 例如:他们仍然打开浏览器,但正在查看其他网页或做其他事情。

有没有办法更新这个,所以它只在用户使用网站时发送AJAX心跳?

3 个答案:

答案 0 :(得分:1)

您可以检查窗口是否是焦点,只有焦点才能检测心跳。 试试这个:

 $(window).focus(function() {
   heartbeat = setInterval(function () { 
    $.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'}); 
   },3000);
 })
 .blur(function() {
   clearInterval(heartbeat);
 });

 $(window).focus();

答案 1 :(得分:1)

    $(document).ready(function(){

       heartBeatInterval = null;

        $(window).focus(function() {
          if(heartBeatInterval == null){
           heartBeatInterval =  setInterval(function () {
                                        $.post('includes/heartbeat.php', 
                                        {'heartBeatConfirmation': '1'}
                                    );  
                                     console.log('We have the fouces of the active tab');
                                 },1000);
          }
        });

        $(window).blur(function() {
            heartBeatInterval = null;
            console.log('We have the lost the focus of the active tab');
        });

    });

答案 2 :(得分:1)

我想这只是一个品味问题:

$(window)
.on('mouseleave', function(){ 
  clearInterval(inside);
})  
.on('mouseenter', function(){
  inside = setInterval(function () { 
    $.post('includes/heartbeat.php', {'heartBeatConfirmation': '1'})
  }, 3000)
})

JSFIDDLE(提醒:window是“结果”Frame)。