Foros del Web » Programando para Internet » Jquery »

Pausar actualización en jquery

Estas en el tema de Pausar actualización en jquery en el foro de Jquery en Foros del Web. Buenas. Estoy empezando a trastear con jquery y empiezan a surgirme las típicas dudas tontas de cuando empiezas con algo (novias inclusive). Os cuento: La ...
  #1 (permalink)  
Antiguo 28/04/2012, 07:19
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 10 años, 3 meses
Puntos: 2
Pausar actualización en jquery

Buenas.

Estoy empezando a trastear con jquery y empiezan a surgirme las típicas dudas tontas de cuando empiezas con algo (novias inclusive). Os cuento:

La idea es cargar mediante la función load en un div una tabla cuyos campos provienen de una base de datos. Cada x segundos con setInterval esa tabla se
actualiza, y van apareciendo los mensajes nuevos (algo parecido a la fisgona de menéame, pero en cutre, para entendernos).

Hasta ahí todo bien, pero estoy intentando que mientras el usuario tenga el ratón sobre la tabla, esta no se actualice (para que no tenga que ir persiguiendo un determinado campo por toda la pantalla).

Lo he intentado de cincuenta mil maneras, la última así:


function rehaz(){
$('.visor').load('/include/vista/loUltimo.php');
}

if(!$('.visorl').mouseover()){
var timer = setInterval(rehaz,5000);
});


Y nada, que no hay manera, así que he optado por pediros ayuda y darme a la bebida simultáneamente.

Gracias anticipadas
  #2 (permalink)  
Antiguo 28/04/2012, 09:17
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 11 años, 4 meses
Puntos: 192
Respuesta: Pausar actualización en jquery

Supongo que algo así podría funcionar:

Código Javascript:
Ver original
  1. var $visor = $('.visor');
  2. var actualizar = true;
  3.  
  4. $visor.mouseenter(function(){
  5.     actualizar = false;
  6. });
  7. $visor.mouseleave(function(){
  8.     actualizar = true;
  9. });
  10.  
  11. function rehaz(){
  12.     if(actualizar){
  13.         $visor.load('/include/vista/loUltimo.php');
  14.     }
  15. }

Si no, al menos tenés una idea de cómo pensar la lógica y cómo almacenar objetos jQuery para no estar examinando el DOM a cada rato.
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 28/04/2012, 09:38
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Pausar actualización en jquery

mil gracias. Ahora lo pruebo
  #4 (permalink)  
Antiguo 28/04/2012, 10:09
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Pausar actualización en jquery

Funciona genial, gracias, Naahuel.

Abusando de vuestra amabilidad, estoy tratando de que si cuando se actualiza la tabla el último registro coincide con el que ya existía antes de la actualización, esto es, que no ha habido novedades, el script haga una cosa, y si en cambio sí que hay campos nuevos, haga otra. Lo estoy intentando hacer así, pero seguro que estoy haciendo algo mal.


Código Javascript:
Ver original
  1. var $visor = $('.visor');
  2.  var actualizar = true;
  3.      
  4. $visor.mouseenter(function(){
  5.         actualizar = false;
  6. });
  7. $visor.mouseleave(function(){
  8.         actualizar = true;
  9. });
  10.    
  11.  function rehaz(){
  12.    
  13.     var primero = $('td.textoOculto:first').text();  
  14.     var segundo ='';
  15.    
  16.     if(actualizar){
  17.             $visor.load('/include/vista/loUltimo.php');
  18.         $('td.textoOculto').fadeOut('3000');
  19.         var segundo = $('td.textoOculto:first').text();  
  20.            
  21.        if(primero != segundo){
  22.                 alert('no coinciden');
  23.     }
  24.         }
  25.     }
  26.  
  27. var timer = setInterval(rehaz,5000);

¿Dónde está el fallo?
  #5 (permalink)  
Antiguo 28/04/2012, 10:25
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 11 años, 4 meses
Puntos: 192
Respuesta: Pausar actualización en jquery

No sé, ¿no lo tenés funcionando online en algún lado?

No entiendo muy bien igual. Si hacés esto:
Código Javascript:
Ver original
  1. $visor.load('/include/vista/loUltimo.php');

Y después hacés el chequeo si el registro ya existía, $.load() ya lo cargó de todas formas.

Otro error es que te olvidás que .load() es AJAX y es asincrónico. Es decir, se ejecuta en forma paralela y lo que le sigue a .load() no espera que esto termine para continuar.

Probá haciendo el chequeo en una función callback que se ejecutaría cuando load() finalice de cargar:

Código Javascript:
Ver original
  1. function rehaz(){
  2.  
  3.     var primero = $('td.textoOculto:first').text();  
  4.     var segundo ='';
  5.  
  6.     if(actualizar){
  7.         $visor.load('/include/vista/loUltimo.php',function(){
  8.             $('td.textoOculto').fadeOut('3000');
  9.             var segundo = $('td.textoOculto:first').text();  
  10.  
  11.             if(primero != segundo){
  12.                 alert('no coinciden');
  13.             }
  14.         });
  15.     }
  16. }

Otra cosa que está rara son los selectores. Son muuuuy amplios. Si tenés otra tabla en el documento va a causar conflictos. Usá selectores más específicos.

Por ejemplo, si la tabla está dentro del elemento .visor, yo haría algo así:
Código Javascript:
Ver original
  1. $visor.find('td.textoOculto')

en lugar de:
Código Javascript:
Ver original
  1. $('td.textoOculto')

pues este último selector es menos específico, más lento y además conflictivo con otras tablas en el documento.
__________________
nahueljose.com.ar
  #6 (permalink)  
Antiguo 28/04/2012, 10:59
 
Fecha de Ingreso: abril-2012
Mensajes: 63
Antigüedad: 10 años, 3 meses
Puntos: 2
Respuesta: Pausar actualización en jquery

Gracias de nuevo, me has solucionado dos problemas de un plumazo.

Etiquetas: pausar, php
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:00.