I'm trying to make an AJAX function update about 30 seconds. I have a simple version of that done, here is the code.
var refInterval = window.setInterval('update()', 30000); // 30 seconds
var update = function() {
$.ajax({
type : 'POST',
url : 'post.php',
success : function(data){
$('.voters').html(data);
},
});
};
This works, however, when the function is FIRST called I don't want it to wait 30 seconds, I just want the function to call, then wait 30 seconds, call again, wait 30 seconds, call again, etc. Any help?
just put the setTimeout into your successhandler and it should work like charm
Invoke the function before setting the timer.
Like so:
Call update once (on document ready) before calling it with the interval:
Consider using
setTimeout
instead - it's more reliable.setInterval
timers can stack when the window doesn't have focus and then all run at once when it gets focus back again. UsingsetTimeout
also ensures that you don't get multiple AJAX requests queued up if the first one blocks for some reason.To start the loop immediately, use an IIFE ("immediately invoked function expression") wrapped around the function:
p.s. don't use string arguments to
setInterval
orsetTimeout
- just pass the function reference directly.Just call update right after you define it: