Estoy intentando llevar a cabo la siguiente secuencia de operaciones usando jQuery en HTML.realizar muchas peticiones AJAX en paralelo, y ejecutar una función de todos ellos completa
- una lista de URL se construye
- Cada una de estas URL se solicita el uso de $ .getJSON (url) en paralelo
- esperar a que todas las solicitudes para completar o fallen (404 podría suceder)
- Tome los datos de todas las Solicitudes JSON completas y haga algo.
que construye el código Java-Script publicado a continuación. Funciona perfecly salvo que una de las peticiones falla debido a un error 404: Entonces, $.when
no se ejecuta porque al instante aborta si falla un peticiones. ¿Puedes de alguna manera anular las solicitudes de Ajax, para que no fallen pero en cambio devuelvan una fuente vacía?
Ya leí this y this publicación, pero no proporciona una solución donde se puede ejecutar el código después de que se hayan completado todas las consultas.
function fetchData() {
queries = [];
//urls is initialized somewhere else containing all urls
for(var url in urls) {
queries.push($.getJSON(url));
}
$.when.apply(this, queries).done(function() {
console.log("Finished all queries, got "+arguments.length+" results");
//Now arguments is a array containing the results of all requests
}
//function returns instantly, no problem!
}
No soy tan experimentado en jQuery, pero parece que necesita contador de consulta. Es decir. Establezca un contador para la cantidad de consultas que enviará. En la función de éxito, o error correspondiente, decrementa el contador (¿es un decremento unitario atómico en Javascript?). Una vez que el contador llega a cero, usted sabe que todas las solicitudes están hechas y puede procesar los resultados.Por supuesto, tendrá que almacenar en caché los resultados de las consultas para su posterior procesamiento una vez que todas las consultas estén completas. – ewh
Duplicado: http://stackoverflow.com/questions/1060539/parallel-asynchronous-ajax-requests-using-jquery – joeytwiddle