attribute - jQuery: Espere hasta que se procesen con éxito múltiples solicitudes GET
parent jquery (2)
Necesito emitir varias solicitudes de $ .get, procesar sus respuestas y registrar los resultados del procesamiento en la misma matriz. El código se ve así:
$.get("http://mysite1", function(response){
results[x1] = y1;
}
$.get("http://mysite2", function(response){
results[x2] = y2;
}
// rest of the code, e.g., print results
¿Hay alguna forma de asegurar que todas las funciones de éxito se hayan completado, antes de continuar con el resto de mi código?
Existe una solución muy elegante: el objeto jQuery Deferred. $ .get devuelve un objeto jqXHR que implementa la interfaz diferida; esos objetos se pueden combinar de la siguiente manera:
var d1 = $.get(...);
var d2 = $.get(...);
$.when(d1, d2).done(function() {
// ...do stuff...
});
Lea más en http://api.jquery.com/category/deferred-object/ y http://api.jquery.com/jQuery.when/
$.when
permite combinar varios s Deferred
(que es lo que devuelve $.ajax
).
$.when( $.get(1), $.get(2) ).done(function(results1, results2) {
// results1 and results2 will be an array of arguments that would have been
// passed to the normal $.get callback
}).fail(function() {
// will be called if one (or both) requests fail. If a request does fail,
// the `done` callback will *not* be called even if one request succeeds.
});