Is there a neat way to make sure a bunch of ajax callbacks have all finished? They don't need to be executed in order, i just need all the data to be there.
one idea is to have them all increment a counter on completion and check if counter == countMax, but that seems ugly. Also, are there sync issues? (from simultaneous read/write to the counter)
The .ajaxStop()
method is available for this, it only fires when the last of the current ajax requests finishes. Here's the full description:
Whenever an Ajax request completes, jQuery checks whether there are any other outstanding Ajax requests. If none remain, jQuery triggers the
ajaxStop
event. Any and all handlers that have been registered with the.ajaxStop()
method are executed at this time.
For example if you wanted to just run something, document is a good place to hook in:
$(document).ajaxStop(function() {
//all requests finished!, do something with all your new fancy data
});
Or you could display a message when this happens, like this:
$("#ajaxProgressDiv").ajaxStop(function() {
//display for 2 seconds then fade out
$(this).text("All done!").delay(2000).fadeOut();
});
You may take a look at the queue plugin.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With