2012-03-27 16 views
17

Necesito emitir varias solicitudes $ .get, procesar sus respuestas y registrar los resultados del procesamiento en la misma matriz. El código es el siguiente:jQuery: Espere a que se procesen varias solicitudes GET

$.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 para asegurarse de que todas las funciones de éxito han completado, antes de proceder con el resto de mi código?

Respuesta

34

Existe una solución muy elegante: el objeto jQuery aplazado. $ .get devuelve un objeto jqXHR que implementa la interfaz diferido - esos objetos se pueden combinar de esta manera:

var d1 = $.get(...); 
var d2 = $.get(...); 

$.when(d1, d2).done(function() { 
    // ...do stuff... 
}); 

Ver más en http://api.jquery.com/category/deferred-object/ y http://api.jquery.com/jQuery.when/

+0

¿Esa solución todavía funciona si tengo funciones de éxito dentro de las llamadas $ .get? Lo había intentado antes, ¡sin suerte! – amir

+0

Sí, eso debería ser posible. – Niko

10

$.when le permite combinar múltiples Deferred s (que es lo $.ajax devoluciones).

$.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. 
}); 
Cuestiones relacionadas