Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Como detener o cancelar proceso ajax en plena ejecucion?

Estas en el tema de Como detener o cancelar proceso ajax en plena ejecucion? en el foro de Frameworks JS en Foros del Web. tengo una galeria de fotos, las fotos cuando carga la pagina todas almaceno en un arreglo la ruta tomada de la base de datos.. osea ...
  #1 (permalink)  
Antiguo 07/10/2012, 12:08
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Como detener o cancelar proceso ajax en plena ejecucion?

tengo una galeria de fotos, las fotos cuando carga la pagina todas almaceno en un arreglo la ruta tomada de la base de datos..
osea que nomas con presionar los botones atras adelante la recorro a excepcion de los comentarios de las fotos que vuelvo a cargar de la base de datos a ver si hay nuevos.
Código Javascript:
Ver original
  1. $('#back').click(function(){
  2. i--;
  3.      var foto=fotos[i];
  4.      var idcomentario=comentarios[i];
  5.    
  6.      document.getElementById('imgcompleta').src = foto;//cada que recorro
  7. muestro en grande la foto
  8.  
  9.     Vercomentarios('POST',idcomentario,<? echo $id; ?>);//muestro los comentarios de la foto
  10.  
  11. }
el problema es que como es una galeria de foto doy la facilidad al usuario de clickearle a la foto directamente y esto hace que la foto se muestre en grande y ademas sus comentarios(en este caso vuelvo a extraer todo comentarios, fotos de la base de datos, y vuelvo a llenar el arreglo, hasta alli todo bien.


el problema surge que cuando doy siguiente o atras, como el caso que pongo.. si hay muchos comentarios o un comentario muy largo en la foto, entonces demoran en cargar unos 5 segundos, si son unos 200 lineas por alli por ejemplo.

entonces si doy atras carga la foto rapido, pues esta en el arreglo, pero los comentarios,(muestro un gif de cargando, mientras se carga) duran 6 segundos, lapso suficiente para que el usuario decida ver otra foto.
hace click directo a una foto de la galeria y se muestra imediatamente, pero ojo, todavia esta cargadno los otros comentarios(lo ideal seria que dejara de cargarlos eh hiciera la otra peticion para la foto clicqueada, cosa que hace normalmente cuando no se estan cargando comentarios), apenas va en el segundo 3 y el usuario ya tiene en pantalla la otra foto, entonces lo que ocurre es que cuando ya termina de cargar el comentario en el div, entonces ya no pertenecen a esa foto nueva que dio clic el usuario..

por eso se me hace la mejor forma, cancelar el proceso ajax que se esta ejecutando si es que el usuario selecciono ya otra foto. como hacer eso?

en java eran hilos y solo ponia.
Código java:
Ver original
  1. Thread.stop();
pero esto es javascript XD
de antemano gracias
  #2 (permalink)  
Antiguo 07/10/2012, 13:11
Avatar de Sirikon  
Fecha de Ingreso: marzo-2009
Mensajes: 82
Antigüedad: 10 años, 8 meses
Puntos: 11
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

A la hora de invocar una función de una llamada AJAX, tienes que ponerla en una variable.

Al ver:

Código Javascript:
Ver original
  1. $('#back').click(function(){...

Imagino que estás usando jQuery, así que cuando llames a la función ajax (ya sea $.ajax, $.get, $.post, etc) mételo en una variable, de forma que sea parecido a ésto:

Código Javascript:
Ver original
  1. var llamada = $.ajax({
  2.   url:'http://webguaydeejemplo.net/'
  3. })

de forma que si quieres pararlo, será:

Código Javascript:
Ver original
  1. llamada.abort()

Saludos!
__________________
Carlos a.k.a. Sirikon - Escorbuto Team
  #3 (permalink)  
Antiguo 07/10/2012, 14:14
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

Cita:
Iniciado por Sirikon Ver Mensaje
A la hora de invocar una función de una llamada AJAX, tienes que ponerla en una variable.

Al ver:

Código Javascript:
Ver original
  1. $('#back').click(function(){...

Imagino que estás usando jQuery, así que cuando llames a la función ajax (ya sea $.ajax, $.get, $.post, etc) mételo en una variable, de forma que sea parecido a ésto:

Código Javascript:
Ver original
  1. var llamada = $.ajax({
  2.   url:'http://webguaydeejemplo.net/'
  3. })

de forma que si quieres pararlo, será:

Código Javascript:
Ver original
  1. llamada.abort()

Saludos!
muchisimas gracias me sirvio mucho...
antes era una galeria superlenta. duraba como 5 a 6 segundos en cargar la pagina cuando daba siguiente..
y ahora solo dura como 0.20 segundos en cargar la foto y 1 a 5 segundos en cargar el coment. pues tomando en cuenta que son unas 200 lineas de coment, pues esta bien :D
ya nomas me falta mostrar la fotos en miniaturas en vez de la original XD y aun mas rapido sera :D
  #4 (permalink)  
Antiguo 07/10/2012, 14:27
Avatar de Sirikon  
Fecha de Ingreso: marzo-2009
Mensajes: 82
Antigüedad: 10 años, 8 meses
Puntos: 11
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

Me alegro mucho de que te funcionara ^^

Saludos!
__________________
Carlos a.k.a. Sirikon - Escorbuto Team
  #5 (permalink)  
Antiguo 07/10/2012, 15:02
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

Cita:
Iniciado por Sirikon Ver Mensaje
Me alegro mucho de que te funcionara ^^

Saludos!
gracias
pero el internet explorer me dio lata siempre..

Código Javascript:
Ver original
  1. if(oAjaxc.readyState== 4 && oAjaxc.readyState != null){
  2.                 respuesta=oAjaxc.responseText;

y no manches le puse try catch a eso y me mando muchas excepciones el internet explorer, de funciones no definidas oO.. como esta eso, si en los demas navegadores funciona bien todo oO

me dice que no se pudo completar la operacion, en donde dice responseText(obvio por que la aborte ) pero al internet explorer como que no le gusta eso oO

como podría solucionar eso.. cielos!

a caso tendria que poner un trycath? que alcabo solo abortare que da lo mismo oO.. o no?

Última edición por minombreesmm; 07/10/2012 a las 15:09
  #6 (permalink)  
Antiguo 07/10/2012, 15:11
Avatar de Sirikon  
Fecha de Ingreso: marzo-2009
Mensajes: 82
Antigüedad: 10 años, 8 meses
Puntos: 11
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

A ver si alguien más te puede ayudar porque yo por lo menos tengo fobia a IE vaya xD, es horrible nada funciona como debería, en fin mucha suerte!

Saludos!
__________________
Carlos a.k.a. Sirikon - Escorbuto Team
  #7 (permalink)  
Antiguo 07/10/2012, 16:54
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

Cita:
Iniciado por Sirikon Ver Mensaje
A ver si alguien más te puede ayudar porque yo por lo menos tengo fobia a IE vaya xD, es horrible nada funciona como debería, en fin mucha suerte!

Saludos!
voy a probar, para mi que lee el php sin antes leer las funciones javascripts declaradas declaradas..

aunque el problema alli parece ser que no permite que abortes, si permite pero no lo toma como algo normal oO

me dice que el arreglo javascript que uso en el bucle php no esta definido oO..
pero si esta definido, sospecho que es por que el navegador internet explorer lee primero ´php y luego javascript..
ya habia resolvido mas problemas , pero lo que no me gusta es que eso solo ocurre en internet explorer :S..
lo peor es que la gente comun ese usa :S
puedo poner en mi web la descarga de google chrome?
supongo que google no tendra inconveniente no?

Última edición por minombreesmm; 07/10/2012 a las 18:27
  #8 (permalink)  
Antiguo 07/10/2012, 18:50
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 7 meses
Puntos: 319
Respuesta: Como detener o cancelar proceso ajax en plena ejecucion?

Cita:
A ver si alguien más te puede ayudar porque yo por lo menos tengo fobia a IE vaya xD, es horrible nada funciona como debería, en fin mucha suerte!

Saludos!
Te acompaño en sentimiento. Microsoft deberia dejar el orgullo e incluir mozilla (que tampoco me agrada mucho pero no es tan malo) en sus verciones de windows en lugar del ie, a veces pienso que seria de la web sin IE y creo que seria mucho mejor que la actual.

opiniones de lado.

agrega una nueva variable al if:

Código Javascript:
Ver original
  1. if((oAjaxc.readyState== 4) && (oAjaxc.readyState != null) && (aborto)){
  2.                 respuesta=oAjaxc.responseText;

la variable aborto esta false al prinncipio (debes definirla asi) y luego de usar .abort() debes ´ponerla en true.
creo que eso funcionaria prueba y nos dises
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: ajax, cancelar, detener, proceso
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 11:22.