Foros del Web » Programando para Internet » Jquery »

JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

Estas en el tema de JQUERY, Como saber si se está esperando una respuesta AJAX por $.post?? en el foro de Jquery en Foros del Web. Una duda. tengo una funcion que cada 500 milisegundos hace una peticion post ( $.post(ruta, {variables}) ). La ciuestion es que en localhost tarda nada, ...
  #1 (permalink)  
Antiguo 21/02/2011, 03:14
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

Una duda. tengo una funcion que cada 500 milisegundos hace una peticion post ( $.post(ruta, {variables}) ).

La ciuestion es que en localhost tarda nada, y las hace todas correlativamente, el problema es que seguramente en el servidor tarde incluso 1 segundo y claro, empezarán a acumularse peticiones, y como por cada 2 una se queda colgada, eso será exponencial y al rato tendré un monton de peticiones pendientes, puede que culge el server en X minutos.

Entonces... ¿Cual seria la forma de que si una peticion está en curso, en la funcion que se ejecuta a los 500 milisegundos compruebe si aun sigue esperando respuesta o puede volver a hacer la peticion? ¿Hay alguna forma de saber si estamos en espera de resultado de una determinada accion post que se ha pedido?

La solucion que se me ocurre es modificar una variable global que al empezar la funcion se ponga en 2 y cuando termine en 1, asi siempre que esté en 2 se puede hacer la peticion... ¿Es la forma adecuada o hay alguna mas optimizada?

Saludos!
  #2 (permalink)  
Antiguo 21/02/2011, 16:45
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

El consejo que le he dado a http://www.forosdelweb.com/f127/funcion-post-887110/ también te sirve a tí.

En cuanto a lo del control de llamada AJAX... Peligro. No suelo recomendar que se lancen llamadas AJAX simultáneas. Mejor concatenarlas en el succes de la que llega, añadiéndole un retardo si hiciera falta para que no se lance inmediatamente. Así sólo hay un AJAX en marcha y no colgará el navegador. También se le añadiría la función "error: function(e) { //volver a lanzar otro AJAX con retardo o lo que sea; }", por si el AJAX falla.
No sé el motivo de por qué necesitas hacer muchas llamadas AJAX de golpe, no puedo ayudarte más.

Si tu caso es que la última llamada AJAX es la que pinta algo en algún div o lo que sea, es decir, la última llamada AJAX es la que contiene la información valiosa, y las llamadas AJAX anteriores que no hallan llegado te la sudan, entonces devuelve la fecha en milisegundos como un parámetro maś (siempre usa JSON para devolver datos), y ten una variable globar en javascript con el tiempo más alto que te haya llegado. Cuando recibas una respuesta por AJAX, primero mira su fecha comparándola con la variable global, y si es menor, ignoras el resto de los datos. Si es superior, entonces pintas los datos o lo que tengas que hacer.

Última edición por marlanga; 21/02/2011 a las 16:59
  #3 (permalink)  
Antiguo 23/02/2011, 17:51
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

Muchas gracias, todas estas cosas que comentas no las usaba nunca. La verdad es que bajo la teoria de tener solo una llamada simultanea me cambias mucho lo que estoy haciendo, pero tienes razon en que es la forma correcta...

El unico problema, es que mi aplicacion obtiene por ajax cada x tiempo diferentes cosas de diferentes scripts... y es casi inevitable lanzar varias llamadas.... :S
  #4 (permalink)  
Antiguo 23/02/2011, 17:53
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

Una pregunta, ¿Por que es preferible devolver el resultado en JSON en vez del html directamente?
Afecta en la velocidad?? Luego tendré que maquetarlo igualmente bajo JS, y parece mas comodo hacerlo en el script php.... aunke pensandolo para futuro la unica cosa que se me ocurra que es mejor es que con ese mismo script diferentes programadores podrian tomar datos y procesarlos a su gusto... aparte de eso no veo nada mas :S


Un saludo!!
  #5 (permalink)  
Antiguo 23/02/2011, 19:55
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

No es que JSON sea mejor o peor. Todo depende de que necesites hacer con los datos que estas requiriendo al server, si necesitas computarlos, obvio es mejor JSON o XML, si solo es contenido que insertaras en el HTML, no te compliques la vida.

Si necesitas hacer un request cada x tiempo, yo haria lo siguiente:
Código Javascript:
Ver original
  1. var maxRetries = 4,
  2. retries = 0;
  3. function callContinuosProc(){
  4. $.ajax({
  5.     url: '/',
  6.     success: function(){
  7.          //hacer algo con los datos
  8.          callContinuosProc();
  9.    },
  10.    error: function(){
  11.         if(retries < maxRetries) {
  12.               retries++;
  13.               callContinuosProc();    
  14.         }
  15.    }
  16. });
  17. }
  18.  
  19. callContinuosProc();

Es solo algo simple y sin probar, pero algo asi seria la idea.

Saludos.
__________________
I see dead pixels
  #6 (permalink)  
Antiguo 24/02/2011, 15:14
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

En teoria cuando usas error en post sirve de la misma manera que en el ajax no? lo digo por que me es mucho mas simple, aunke no puedo controlar el timeout...

$.post(ruta, {variables}, function(){}).error(function(){});


En el ejemplo que has puesto SergeMedina hablas de como reintentar si la funcion falla, pero no de como hacer para evitar varios ajax al mismo tiempo.

El unico problema que tengo ahora mismo es el que comenta marlanga sobre el problema que puede suponer hacer 10 llamadas a diferentes excripts cada segundo por que cada script comprueba diferentes cosas y son scripts grandes... y el hecho de tenerlo en un mismo sitio seria un poco lioso... aunke alomejor me toca dejarlo lioso y devolver algo que se parsee para obtener las diferentes cosas...
  #7 (permalink)  
Antiguo 25/02/2011, 20:18
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: JQUERY, Como saber si se está esperando una respuesta AJAX por $.post??

Pues seria muy facil adaptar la función para que verificara que llamadas se estan ejecutando y asi saber cuando ignorar una.
__________________
I see dead pixels

Etiquetas: ajax, esperando, post, respuesta
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 19:13.