Foros del Web » Programando para Internet » Jquery »

Ajax: Abortar todos los Ajax activos

Estas en el tema de Ajax: Abortar todos los Ajax activos en el foro de Jquery en Foros del Web. Hola a todos: He desarrollado un proyecto y en uno de los apartados hace muchas llamadas Ajax y todo va perfecto. El problema es que ...
  #1 (permalink)  
Antiguo 05/05/2016, 01:55
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 17 años, 6 meses
Puntos: 5
Ajax: Abortar todos los Ajax activos

Hola a todos:

He desarrollado un proyecto y en uno de los apartados hace muchas llamadas Ajax y todo va perfecto. El problema es que una vez que he entrado en ese apartado y me voy a otro apartado (el cual no tiene ajax ni nada especial) tarda muchísimo en cargar esa otra página, por lo menos 10 segundos.

Viendo la consola veo que el problema podría ser que quedan pendiente muchas cosultas Ajax por lo que he creado una función que se llama siempre que se cambie de página:

function abortarAjax() {
jQuery.each(xhrPool, function(i){
xhrPool[i].abort();
});
}

Y efectivamente viendo la consola una vez que se cambia de página todas las peticiones de Ajax se abortan y se cancelan al momento, pero aún así sigue tardando unos 10 segundos al cargar la nueva página. Es como si aparte de abortar la petición hubiera que hacer algo más, como eliminarla o algo así para que desaparezca de la consola. He probado varias cosas pero nada hace que cargue más rápido.

¿Alguna idea? ¿Qué residuos pueden quedar para que vaya tan lento cuando cambias de página?

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 09/05/2016, 13:15
 
Fecha de Ingreso: agosto-2015
Ubicación: La Habana
Mensajes: 72
Antigüedad: 9 años, 3 meses
Puntos: 4
Respuesta: Ajax: Abortar todos los Ajax activos

Hola, una pregunta, Cuando cargas los otros apartados sin haber cargado antes el que tiene mucho Ajax se cargan rápido?
  #3 (permalink)  
Antiguo 13/05/2016, 02:35
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 17 años, 6 meses
Puntos: 5
Respuesta: Ajax: Abortar todos los Ajax activos

Sí, cuando cargo otra página que viene de una página normal (sin ajax) me carga rápido. Siempre tarda en cargar muchísimo cuando viene de una página que está ejecutando muchos ajax.

Debe haber alguna manera de "limpiar" toda la memoria de esa página anterior. He abortado los ajax pero algunos residuos quedarán porque tarda un montón en cargar la nueva página.

¿Alguien se le ocurre alguna manera de "limpiar" todos los residuos que quedan en una página antes de salir de ella?

Gracias
  #4 (permalink)  
Antiguo 18/05/2016, 04:34
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 17 años, 6 meses
Puntos: 5
Respuesta: Ajax: Abortar todos los Ajax activos

Refloto este tema para preguntar algo relacionado con él y que seguro que se podrá hacer.

¿Cómo puede hacer en un Ajax que si la petición no me da respuesta en 2000 milisegundos se aborte automáticamente?, es decir, tengo un código como este:


foreach ($arr as $clave=>$valor) { ?>
<script>
$.ajax({
// async: false,
type: "POST",
url: "obtenerDatosAPI.php",
dataType: "json",
data: {
"id_user": "<?=$valor["id_user"];?>"
},
success: function(data) {
}
});
</script>
<?php
} // foreach

Al ejecutarlo algunos datos me los devuelve sin problema en pocos milisegundos pero otros se "enquistan" y tardan mucho en devolverlo o directamente se quedan pendientes sin que ese ajax se acabe nunca. ¿Cómo puedo especificarle que si a los 2000 milisegundos no me ha devuelto nada ese Ajax se aborte automáticamente?

Estoy seguro de que se puede hacer de alguna manera, pero buscando en Google todavía no he encontrado ninguna solución.

Gracias.
  #5 (permalink)  
Antiguo 18/05/2016, 17:50
Avatar de kip13  
Fecha de Ingreso: agosto-2011
Mensajes: 167
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Ajax: Abortar todos los Ajax activos

Hola, puedes probar con uno de estos codigos:

Código Javascript:
Ver original
  1. var xhr;
  2.     var fn = function(){
  3.         if(xhr && xhr.readyState != 4){
  4.             xhr.abort();
  5.         }
  6.         xhr = $.ajax({
  7.             type: "POST",
  8.             url: "obtenerDatosAPI.php",
  9.             data: {"id_user": "<?=$valor["id_user"];?>"},
  10.             success: function(data) {
  11.                 //do something
  12.             }
  13.         });
  14.     };
  15.  
  16.     var interval = setInterval(fn, 200);
Código PHP:
Ver original
  1. $.ajax({
  2.         type: "POST",
  3.         url: "obtenerDatosAPI.php",
  4.         data: {"id_user": "<?=$valor["id_user"];?>"},
  5.         timeout:200,
  6.         success: function(data) {
  7.             //do something
  8.         }
  9.         error: function(x, t, m) {
  10.             if(t==="timeout") {
  11.                 alert("got timeout");
  12.             } else {
  13.                 alert(t);
  14.             }
  15.         } })​;


Avisanos si te sirvio

Saludos

Última edición por kip13; 18/05/2016 a las 17:56

Etiquetas: ajax
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 09:30.