I'm using the following javascript to refresh a div on a page every 30 seconds:
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(document).ready(function(){
$.ajaxSetup({cache: false});
});
getStatus();
});
function getStatus() {
$('div#content').load('ajax_stream.php').fadeIn("slow");
setTimeout("getStatus()",30000); // refresh every 30000 milliseconds (30 seconds)
}
</script>
It occurs to me that there needs to be some form of limitation so that after 'n' minutes, we stop refreshing the div - ie if a user leaves their browser open forever, we don't just keep consuming server resources.
How can I achieve this? Additionally, if I wanted to call a new file inside the DIV upon timeout, what is the best method?
I'm using the following javascript to refresh a div on a page every 30 seconds:
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(document).ready(function(){
$.ajaxSetup({cache: false});
});
getStatus();
});
function getStatus() {
$('div#content').load('ajax_stream.php').fadeIn("slow");
setTimeout("getStatus()",30000); // refresh every 30000 milliseconds (30 seconds)
}
</script>
It occurs to me that there needs to be some form of limitation so that after 'n' minutes, we stop refreshing the div - ie if a user leaves their browser open forever, we don't just keep consuming server resources.
How can I achieve this? Additionally, if I wanted to call a new file inside the DIV upon timeout, what is the best method?
Share Improve this question edited Apr 2, 2012 at 13:32 Hubro 59.5k73 gold badges237 silver badges402 bronze badges asked Apr 2, 2012 at 13:18 WAUSWAUS 631 silver badge7 bronze badges4 Answers
Reset to default 5maybe you could, just store the timeout and check if the time in milliseconds is lower then the time in minutes you want the script to stop ?
var timerunning;
...
timerunning = timerunning + 30000;
if(timerunning < 120000){
setTimeout("getStatus()",30000);
}
didn't test though, good luck :)
How about this solution?
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
var statusUpdateTimeout = null;
$(function(){
$(document).ready(function(){
$.ajaxSetup({cache: false});
});
// Run get status and repeat every 30 seconds
getStatus();
statusUpdateTimeout = setInterval("getStatus()", 30000);
// Stop updating after 15 minutes
setTimeout(function() {
if(statusUpdateTimeout) clearInterval(statusUpdateTimeout);
}, 900000);
});
function getStatus() {
$('div#content').load('ajax_stream.php').fadeIn("slow");
}
</script>
I replaced the setTimeout
with a setInterval
and moved it outside the getStatus
function. Also I set a new timeout that will stop the interval after 15 minutes.
Also for future reference, please indent your code properly so that it's readable to others.
I think the best solution for you is to set a global variable, that increments each time getStatus() is executed, and set it back to 0 on $('body').mousemove(); (this is the behaviour that Gmail uses to set user status to IDLE on web gmail chat)
Here is how to do it:
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
//when the page loads, the user is idle for 0 seconds
var idle=0;
$(function(){
$(document).ready(function(){
$.ajaxSetup({cache: false});
});
getStatus();
});
function getStatus() {
idle+=1;
//if idle for 5 minutes, do nothing
if (idle==10) return;
$('div#content').load('ajax_stream.php').fadeIn("slow");
setTimeout("getStatus()",30000); // refresh every 30000 milliseconds (30 seconds)
}
//reset the counter whenever an activity is done on the page
$('body').mousemove(function(){
idle=0;
});
</script>