Adam
Adam

Reputation: 20882

jquery Send Heartbeat when Viewing Page

I've written the following Jquery to send a Heartbeat back to PHP every 3 seconds and it works fine. The reason I'm doing this is to understand what users are currently logged in and using the site.

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

The catch I'm finding is it continues to heartbeat when users aren't looking at the site - eg: they still have the browser open but are looking at other pages or doing something else.

Is there a way to update this so it only sends the AJAX heartbeat if the user is using the site?

Upvotes: 0

Views: 1022

Answers (3)

loveNoHate
loveNoHate

Reputation: 1547

It is just a matter of taste I guess:

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

JSFIDDLE ( Reminder: window is "Result" Frame ).

Upvotes: 1

Control Freak
Control Freak

Reputation: 13233

You can check if window is focused and only heartbeat if it's focused. Try this:

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

 $(window).focus();

Upvotes: 1

sanjeev
sanjeev

Reputation: 4621

    $(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');
        });

    });

Upvotes: 1

Related Questions