Foros del Web » Programando para Internet » Jquery »

Peticiones Ajax simultáneas

Estas en el tema de Peticiones Ajax simultáneas en el foro de Jquery en Foros del Web. Pido perdón a los Moderadores, ya que respondí un mensaje antiguo y lo han cerrado. Por esa razón creo este nuevo tema copiando el problema ...
  #1 (permalink)  
Antiguo 20/03/2014, 15:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 9 meses
Puntos: 3
Peticiones Ajax simultáneas

Pido perdón a los Moderadores, ya que respondí un mensaje antiguo y lo han cerrado. Por esa razón creo este nuevo tema copiando el problema que estoy presentando.

Seguramente a varios usuarios de AJAX les ha pasado:

Estoy intentando hacer varias peticiones AJAX de manera simultánea, y he probado muchas técnicas, y siempre se ejecutan en cola, hasta que una petición no acaba, la siguiente no comienza.

Cada petición AJAX está de la siguiente forma:
$.ajax({
async: true,
.....
....
})

La verdad es que estoy desesperado porque ya no se que puede estar pasando.

¿Alguna ayuda?

Gracias
  #2 (permalink)  
Antiguo 20/03/2014, 15:44
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 14 años, 2 meses
Puntos: 45
Respuesta: Peticiones Ajax simultáneas

Lo que tengo entendido es:

Cada petición AJAX se ejecuta hasta que termine la otra..

Es decir, que no se puede realizar al mismo tiempo...

Para que quieres realizar peticiones simultaneas???? de seguro se puede hacer todo en una sola
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #3 (permalink)  
Antiguo 20/03/2014, 15:49
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: Peticiones Ajax simultáneas

Si usas php, debes cerrar la sesión en los scripts que no deban encolarse, pero no session_close() si no con session_write_close();
  #4 (permalink)  
Antiguo 20/03/2014, 16:09
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 11 años, 5 meses
Puntos: 32
Respuesta: Peticiones Ajax simultáneas

tal y como dijo malakian mejor comenta que es lo que quieres hacer con peticiones ajax simultaneas por que deseguro en uno solo lo puedes hacer y te estas acomplejando sin motibo
  #5 (permalink)  
Antiguo 20/03/2014, 17:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Respuesta: Peticiones Ajax simultáneas

Hola:

No sé como implementa ajax la librería que usas, pero evidentemente nunca se hacen peticiones simultáneas ya que las instrucciones se ejecutan secuencialmente, y las respuestas ajax asincronas son eventos que dependen de la petición (Nunca será lo mismo una petición que consulte una base de datos, a otra que solo devuelva el valor de una variable... o que renderice una imagen...) y esas respuestas con ajax normal pueden invertir la secuencia de respuestas.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 20/03/2014 a las 17:17 Razón: cerrar paréntesis
  #6 (permalink)  
Antiguo 21/03/2014, 07:58
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 9 meses
Puntos: 3
Respuesta: Peticiones Ajax simultáneas

Muchas gracias a todos.
Paso a comentar.

Estoy usando PHP, y uso JQUERY para las conexiones Ajax.

La idea, por ejemplo, sería que al apretar un botón, mostrar en un div un resultado. Este resultado, es tomando de un WebService de una empresa. Para la conexión al WebService uso NUSOAP.

Pero en realidad, al apretar el botón, debo mostrar resultados pero de 4 empresas, cada una con su WebService. Todo funciona perfecto, pero lo único malo es que comienza a procesar una, hasta que no termina no empieza la otra, y luego así hasta que estén completas las 4.

Por eso necesito que las 4 conexiones sean simultáneas, es decir, al leer mi JAVASCRIPT. las ejecute inmediatamente, sin necesidad de esperar una para que comience la otra.

Adjunto una imágen para que puedan darse cuenta:



Lo malo de esto es que quizás el WebService una empresa demora mucho tiempo, y en vez de ir procesando los restantes, se queda esperando a que termine... y esto es muy engorroso, ya que muchas veces un webservice puede demorar cerca de 30 segundos o mas.

En mi JAVASCRIPT, al apretar el botón llama a la función "Procesar", hace esto mas o menos:

Código HTML:
function Procesar(){
	WebService_Empresa(1);
	WebService_Empresa(2);
	WebService_Empresa(3);
	WebService_Empresa(4);
}

function WebService_Empresa(empresa){
   $.ajax({
         async: true,
         url: 'procesos_webservice.php',
         type: 'post',
         data: 'empresa=1',
	 success: function(data){$('div#'+ empresa).html(data);}
   });
}
La página 'procesos_webservice.php' recibe una variable llamada "empresa", la cual, según cual sea el número, se conecta con el WebService correspondiente. Todo funciona perfecto, el problema es lo que marqué con negrita.

Nuevamente muchas gracias, y ojalá puedan darme alguna ayuda!!
  #7 (permalink)  
Antiguo 21/03/2014, 08:59
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 11 años, 5 meses
Puntos: 32
Respuesta: Peticiones Ajax simultáneas

y por que la necesidad de 4 ajax? por que mejor no retornas los 4 div en un solo ajax?
  #8 (permalink)  
Antiguo 21/03/2014, 09:20
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 14 años, 2 meses
Puntos: 45
Respuesta: Peticiones Ajax simultáneas

Y por que no intentas algo asi:

Código Javascript:
Ver original
  1. //haces tu peticion ajax
  2. $.ajax(...);


En el servidor
Código PHP:
Ver original
  1. function getvaluesAllCompany($data){
  2.    $company1 = getValuesCompany1(); //llamas al WS
  3.    $company2 = getValuesCompany2(); //llamas al WS
  4.    $company3 = getValuesCompany3(); //llamas al WS
  5.    $company4 = getValuesCompany4(); //llamas al WS
  6.  
  7.   echo json_encode(array('company1' => $company1, 'company2' => $company2, 'company3' => $company3, 'company4' =>$company4));
  8. }

luego en la respuesta del AJAX

Código Javascript:
Ver original
  1. $('#div1').html(response.company1);
  2. $('#div2').html(response.company2);
  3. //asi sucesivamente


Perdón por mi inglés jejeje
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #9 (permalink)  
Antiguo 25/03/2014, 08:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 9 meses
Puntos: 3
Respuesta: Peticiones Ajax simultáneas

Gracias a todos.
Estuve haciendo algunas modificaciones, y no me decidí a usar JSON, sino que voy a esperar que termine una para que empiece otra, y así sucesivamente.

Puedo deducir que no se puede hacer varias peticiones Ajax simultáneas, sino que se van encolando.

Ahora mi duda es otra:

En mi JS, tengo arriba de todo esto:
Código HTML:
$.xhrPool = [];
$.xhrPool.abortAll = function(){
	$(this).each(function(idx,jqXHR){jqXHR.abort();alert('abortado');});
	$.xhrPool.length = 0;
};
$.ajaxSetup({
	cache: false,
	beforeSend: function(jqXHR){$.xhrPool.push(jqXHR);},
	complete: function(jqXHR){
		var index = $.xhrPool.indexOf(jqXHR);
		if (index > -1){$.xhrPool.splice(index, 1);}
	}
});
Es un código que encontré en internet para cancelar todas las peticiones Ajax enviadas (en realidad no las cancela, sino que las sigue realizando en el servidor, pero ignora los resultados en mi HTML).

La idea es que una vez que lanzo todas las solicitudes Ajax a los diferentes servidores, tengo un botón, el cual le puse un evento onclick="javascript:Cancelar_Todo" ... esa función en mi JS está escrita así:

Código HTML:
function Cancelar_Todo(){
	$.xhrPool.abortAll();
}
Ahora, supongamos que a la función que puse hace unos días, le agrego lo que está en negrita:

Código:
function WebService_Empresa(empresa){
   $.ajax({
         async: true,
         url: 'procesos_webservice.php',
         type: 'post',
         data: 'empresa=1',
	 success: function(data){alert('exito');$('div#'+ empresa).html(data);}
   });
}
No me funciona el botón para cancelar.
Es decir, una vez que mando a ejecutar las 4 funciones Ajax, antes de que termine la primera, apreto el botón cancelar, pero igualmente me devuelve el cartel "Exito" ... ¿como hago para ignorar todas las peticiones Ajax enviadas ? obviamente ignoradas para que no hagan nada luego de terminar.

Bueno, nuevamente mil gracias y perdón por lo extenso.

Ojalá puedan ayudarme.

Saludos

Etiquetas: ajax, javascript, peticiones
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 00:36.