Solicitudes asíncronas incendio en orden, pero volverá en el orden en que lo completen primero. Por lo tanto, no existe una manera segura de obligarlos a terminar al mismo tiempo; sin embargo, puede crear reglas para ejecutar código solo después de que hayan regresado ciertos grupos.
Por ejemplo, defina una función de devolución de llamada con un conjunto de reglas, y páselo a cada devolución de llamada success
para todas sus solicitudes ajax.
var completedObject = {};
function groupSuccessCallback() {
// Test for any combination of requirements
if (completedObject.ajax1 && completedObject.ajax2) {
... // Do something that only requires 1 and 2
}
if (completedObject.ajax1 && completedObject.ajax2 && completedObject.ajax3) {
... // Do something that requires all 3 being done
// your data is available at completedObject.ajax#
}
// Or test for _all_ entries for a dynamic count
var allComplete = true;
for(var i in completedObject) {
if (completedObject.hasOwnProperty(i) && !completedObject[i]) {
allComplete = false;
}
}
// Do whatchya need.
if (allComplete) {
alert("bb-b-bb-b-b-b-bbb... that's all folks!");
}
}
continuación, establezca las banderas dentro de sus funciones de éxito:
// Ajax1
completedObject['anything'] = false; // instantiate a dynamic entry in the object or use an array if you can't use names.
$.ajax({
...,
...,
success: function(data) {
completedObject['anything'] = data || true;
groupSuccessCallback();
}
});
encontrado ReadyX en http://plugins.jquery.com/project/readyx Afirma que controla el orden. Pero no funcionará con 1.4.x ya que 'readyList' ya no está disponible. –
Objetivamente, ¿cuál es su problema con mi solución? –
No tiene nada de malo. Lo votó.Esperaba algo de soporte interno de jQuery. Algo así como ReadyList. Su solución funciona, pero requiere tocar todas las funciones involucradas. –