Oto obiekt wywołania zwrotnego, który napisałem, w którym możesz ustawić pojedyncze wywołanie zwrotne tak, aby uruchamiało się po zakończeniu wszystkich lub pozwolić każdemu z nich mieć własne wywołanie zwrotne i uruchomić je wszystkie po zakończeniu:
OGŁOSZENIE
Od jQuery 1.5+ możesz używać metody odroczonej, jak opisano w innej odpowiedzi:
$.when($.ajax(), [...]).then(function(results){},[...]);
Przykład odroczonego tutaj
dla jQuery <1.5 zadziała poniższe działanie lub jeśli chcesz, aby wywołania ajax były uruchamiane w nieznanych momentach, jak pokazano tutaj z dwoma przyciskami: uruchamiane po kliknięciu obu przycisków
[stosowanie]
dla pojedynczego wywołania zwrotnego po zakończeniu: Przykład roboczy
var requestCallback = new MyRequestsCompleted({
numRequest: 3,
singleCallback: function(){
alert( "I'm the callback");
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
każdy ma swoje własne wywołanie zwrotne po ukończeniu: Przykład roboczy
var requestCallback = new MyRequestsCompleted({
numRequest: 3
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the first callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the second callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the third callback');
});
}
});
[Kod]
var MyRequestsCompleted = (function() {
var numRequestToComplete, requestsCompleted, callBacks, singleCallBack
return function(options) {
if (!options) options = {}
numRequestToComplete = options.numRequest || 0
requestsCompleted = options.requestsCompleted || 0
callBacks = []
var fireCallbacks = function() {
alert("we're all complete")
for (var i = 0
}
if (options.singleCallback) callBacks.push(options.singleCallback)
this.addCallbackToQueue = function(isComplete, callback) {
if (isComplete) requestsCompleted++
if (callback) callBacks.push(callback)
if (requestsCompleted == numRequestToComplete) fireCallbacks()
}
this.requestComplete = function(isComplete) {
if (isComplete) requestsCompleted++
if (requestsCompleted == numRequestToComplete) fireCallbacks()
}
this.setCallback = function(callback) {
callBacks.push(callBack)
}
}
})()