Tengo una función en particular que quiero ejecutar una vez, y solo después de la finalización de varias solicitudes AJAX.Activar una función solo después de la finalización de varias solicitudes AJAX
Mi solución actual se ve un poco como esto:
function doWork() {
//This is the function to be run once after all the requests
}
//some tracking/counting variables
var ajaxDoneCounter = 0;
var numOfAjaxRequests = 5;
var workDone = false;
function doWorkTrigger() {
ajaxDoneCounter++;
if(!workDone && ajaxDoneCounter >= numOfAjaxRequests) {
workDone = true;
doWork();
}
}
// ...
//and a number of ajax requests (some hidden within functions, etc)
//they look something like this:
$.ajax({
url: "http://www.example.com",
dataType: "json",
success: function(data) {
//load data in to variables, etc
doWorkTrigger();
}
});
Una trampa obvia en lo anterior es que cualquier llamada AJAX que no tiene éxito no aumentará ajaxDoneCount
y así doWork()
probablemente nunca será llamado. Puedo solucionarlo utilizando la devolución de llamada error
dentro de cualquier $.ajax
, por lo que no me preocupa demasiado.
Lo que quiero saber es si lo anterior es seguro y/o es una buena práctica.
¿Hay algún truco que me haya perdido, o cualquier otra cosa que pueda funcionar mejor?
Es lo que le hubiera sugerido que haga al leer la descripción del problema. No estoy seguro de que "no se me ocurra nada mejor" es una "respuesta" adecuada, así que simplemente comente en su lugar. ;-) – Chris