46

I have a php page that echos out rows from a database. I want to call it via jquery/ajax every 30 seconds. But I also want to be able to call the page at any time so that if I add a record via the form, once the form submits I want the page via called to ajax to update the results right away. Can anyone point me in the right direction or provide some base code so I can try to figure this out? Still very new to jquery/ajax.

toddmo
  • 20,682
  • 14
  • 97
  • 107
John
  • 9,840
  • 26
  • 91
  • 137

1 Answers1

75

If you want to set something on a timer, you can use JavaScript's setTimeout or setInterval methods:

setTimeout ( expression, timeout );
setInterval ( expression, interval );

Where expression is a function and timeout and interval are integers in milliseconds. setTimeout runs the timer once and runs the expression once whereas setInterval will run the expression every time the interval passes.

So in your case it would work something like this:

setInterval(function() {
    //call $.ajax here
}, 5000); //5 seconds

As far as the Ajax goes, see jQuery's ajax() method. If you run an interval, there is nothing stopping you from calling the same ajax() from other places in your code.


If what you want is for an interval to run every 30 seconds until a user initiates a form submission...and then create a new interval after that, that is also possible:

setInterval() returns an integer which is the ID of the interval.

var id = setInterval(function() {
    //call $.ajax here
}, 30000); // 30 seconds

If you store that ID in a variable, you can then call clearInterval(id) which will stop the progression.

Then you can reinstantiate the setInterval() call after you've completed your ajax form submission.

toddmo
  • 20,682
  • 14
  • 97
  • 107
treeface
  • 13,270
  • 4
  • 51
  • 57
  • Thanks for the response! So your saying if I use the code above to refresh the ajax call every 5 seconds then on the same page I have a form someone fills out that gets submit, once its done adding the record I can call the same setInterval function above and it wont have 2 instances of that function running at once? – John Dec 28 '10 at 00:33
  • 10
    So what you want is for an interval to run every 30 seconds *until* a user initiates a form submission...and then create a new interval after that? That is also possible. `setInterval()` returns an integer which is the ID of the interval. If you store that ID in a variable, you can then call `clearInterval(id)` which will stop the progression. Then you can reinstantiate the `setInterval()` call after you've completed your ajax form submission. – treeface Dec 28 '10 at 00:43