Foros del Web » Programando para Internet » Jquery »

multiples llamadas ajax

Estas en el tema de multiples llamadas ajax en el foro de Jquery en Foros del Web. Buenas a todos! a ver si pueden echarme una manita... Estoy cargando varias paginas externas vía ajax en unos contenedores, algo simplificado seria: var parametros1 ...
  #1 (permalink)  
Antiguo 12/11/2015, 09:10
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta multiples llamadas ajax

Buenas a todos! a ver si pueden echarme una manita...

Estoy cargando varias paginas externas vía ajax en unos contenedores, algo simplificado seria:

var parametros1 = {"situacion" : "Almacen"};
$.ajax({
data: parametros1, url: 'sumatotales.php', type: 'post',
success: function (re) {
$("#resultado1").html(re);
}
});

var parametros2 = {"situacion" : "Oficina"};
$.ajax({
data: parametros2, url: 'sumatotales.php', type: 'post',
success: function (re) {
$("#resultado2").html(re);
}
});

Es decir que llamo a la misma página (sumatotales.php) con diferentes parametros (Almacen, oficina....) para que me muestre los resultados en las diferentes capas (resultado1, resultado2, etc.)

Pero las llamadas que estoy haciendo son mas de 5 y queria saber si puedo hacer que se ejecuten una detras de otra, es decir que cuando se acabe una, entre la siguiente... He visto ejemplos de callbacks, de $.when(... pero no se si es lo que estoy buscando ni implementarlo....
  #2 (permalink)  
Antiguo 12/11/2015, 14:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: multiples llamadas ajax

A lo que te refieres en la parte final es a objetos diferidos y promesas. Con ellas puedes realizar acciones luego de haberse completado otras.

Para tu caso, como además veo que repites código en el cual solo varían un par de líneas, te conviene utilizar una función recursiva, la cual se llamará a sí misma (por eso es recursiva) cuando se haya terminado la petición asíncrona actual.

Código Javascript:
Ver original
  1. function ajax(calls){
  2.     $.when($.ajax(calls[0].properties)).then(function(res){
  3.         calls[0].callback(res);
  4.         calls.splice(0, 1);
  5.         if (calls.length) ajax(calls);
  6.     });
  7. }
  8.  
  9. ajax([
  10.     {
  11.         properties: {
  12.             url: "destino1.php",
  13.             type: "post",
  14.             data: {
  15.                 variable: 1
  16.             }
  17.         },
  18.         callback: function(r){
  19.             //Instrucciones
  20.         }
  21.     },
  22.     {
  23.         properties: {
  24.             url: "destino2.php",
  25.             type: "get",
  26.             data: {
  27.                 variable: 2
  28.             }
  29.         },
  30.         callback: function(r){
  31.             //Instrucciones
  32.         }
  33.     },
  34.     {
  35.         properties: {
  36.             url: "destino3.php",
  37.             type: "post",
  38.             data: {
  39.                 variable: 3
  40.             }
  41.         },
  42.         callback: function(r){
  43.             //Instrucciones
  44.         }
  45.     }
  46. ]);

La función recibe un array de objetos. Cada objeto posee un atributo y un método. El atributo posee un objeto literal en el cual se definen el destino hacia el cual se enviará la información, el método de envío y los datos a enviar. El método no es otra cosa que una llamada de retorno para hacer algo con la respuesta recibida.

En la función, utilizamos el método $.when() mediante el cual ejecutaremos una función cuando se haya completado la petición asíncrona pasada como argumento. Como puedes ver, tomo al primer elemento de calls, el cual es el array que recibió la función como argumento, y le paso al método $.ajax(), el conjunto de propiedades establecidas en properties. Una vez completada la petición asíncrona, ejecuto la llamada de retorno correspondiente al primer elemento del array calls, pasándole la respuesta de la petición asíncrona como argumento. Enseguida, elimino al primer elemento del array calls y verifico si este aún posee elementos; de ser así, invoco a la misma función ajax() pasándole como argumento al array calls pero ya actualizado, es decir, sin el primer elemento, quedando el segundo en la primera posición, el tercero en la segunda y así sucesivamente.

Si quisieras que transcurra un determinado tiempo entre cada ejecución, puedes utilizar un temporizador:

Código Javascript:
Ver original
  1. if (calls.length){
  2.     setTimeout(function(){
  3.         ajax(calls);   
  4.     }, 1000);          
  5. }

En el ejemplo, las llamadas se ejecutarán de manera sucesiva luego de transcurrido un segundo entre el término de la ejecución de una de ellas y el inicio de la siguiente.

Aunque veo que utilizas el mismo destino y método de envío para todas las peticiones asíncronas, la forma que te propongo te puede servir para casos en los que dichos datos varíen, como en el ejemplo.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 12/11/2015 a las 14:56 Razón: Comentarios finales

Etiquetas: ajax, llamadas, multiples
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:19.