all javascript jquery ajax jsonp deferred

javascript - all - jquery replace html



Múltiples dinámicas aplazadas de jQuery Ajax. (1)

Utilizando el patrón diferido de jQuery http://api.jquery.com/jQuery.when/ , estoy tratando de hacer varias llamadas jsonp ajax y esperar los resultados antes de pasar al siguiente paso. Puedo lograr esto usando una cantidad fija de llamadas porque puedo establecer el número de parámetros de argumentos resueltos en el objeto diferido ".done ()". Pero en mi aplicación no funciona porque el número de llamadas es dinámico y siempre desconocido.

Este primer ejemplo simplificado funciona porque puedo establecer el número de argumentos en la función resuelta .done (). Sé que necesito dos porque hay dos llamadas en .when ():

$.when( $.ajax( url1 ), $.ajax( url2 ) ).done(function( a1, a2 ) { var data = a1[ 0 ] + a2[ 0 ]; });

Esto es lo que necesito, pero no puedo hacerlo funcionar:

var urls = GetUrlList(); // returns array of urls to json service var requests = []; // hold ajax request for (i = 0; i < urls.length; i++) { requests.push($.ajax(url[i])); } $.when.apply($, requests).done(function ("what goes here?") { // Need to get the data returned from all ajax calls here });

¡Gracias por cualquier ayuda en esto!


Puede usar arguments , que es un rey especial del objeto que contiene todos los argumentos pasados ​​a una función

$.when.apply($, requests).done(function () { console.log(arguments); //it is an array like object which can be looped var total = 0; $.each(arguments, function (i, data) { console.log(data); //data is the value returned by each of the ajax requests total += data[0]; //if the result of the ajax request is a int value then }); console.log(total) });