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

Duda con cambio de estado

Estas en el tema de Duda con cambio de estado en el foro de Frameworks JS en Foros del Web. Construí un pequeño manual de uso que resultó más usable haciéndolo en Ajax. En general funciona todo bien salvo un pequeño detalle que no me ...
  #1 (permalink)  
Antiguo 07/07/2009, 09:33
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Duda con cambio de estado

Construí un pequeño manual de uso que resultó más usable haciéndolo en Ajax. En general funciona todo bien salvo un pequeño detalle que no me gusta mucho:

Cuanto el onreadystate está en 1 aparece el texto "Cargando" como es natural, y al pasar a 4 los datos se cargan correctamente. El detalle es que cuando viene la próxima consulta (y pasa a 1 de nuevo), aparece de nuevo "Cargando..." sustituyendo lo que había antes. ¿Existe una forma de que apareza ese mismo "Cargando" encima de los resultados anteriores en lugar de limpiar el espacio y sustituirlo por completo?.
  #2 (permalink)  
Antiguo 07/07/2009, 09:38
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con cambio de estado

Se puede, depende de cómo hagas para mostrar el "Cargando...". ¿Podrías mostrar esa parte del código?

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 07/07/2009, 09:47
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Duda con cambio de estado

Código javascript:
Ver original
  1. function alertContents() {
  2.   if (http_request.readyState == 1) {
  3.     document.getElementById('wpsi-demo-contenedor').innerHTML="Cargando, por favor espere";
  4.   }
  5.   if (http_request.readyState == 4) {
  6.     if (http_request.status == 200) {
  7.       result = http_request.responseText;
  8.       document.getElementById('wpsi-demo-contenedor').innerHTML = result;            
  9.     } else {
  10.       alert('There was a problem with the request.');
  11.     }
  12.   }
  13. }
  #4 (permalink)  
Antiguo 07/07/2009, 09:52
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con cambio de estado

En lugar de innerHTML puedes usar insertBefore(). Por ejemplo:
Código javascript:
Ver original
  1. var texto = document.createTextNode("Cargando, por favor espere");
  2. var elemento = document.getElementById('wpsi-demo-contenedor');
  3. elemento.insertBefore(texto, elemento.firstChild);

También puedes concatenar en innerHTML:
Código javascript:
Ver original
  1. var elemento = document.getElementById('wpsi-demo-contenedor');
  2. elemento.innerHTML = "Cargando, por favor espere" + elemento.innerHTML;
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 07/07/2009 a las 10:00
  #5 (permalink)  
Antiguo 07/07/2009, 16:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con cambio de estado

O usar un div flotante frente a la pagina que se oculte al terminar el request AJAX...
  #6 (permalink)  
Antiguo 07/07/2009, 22:16
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Duda con cambio de estado

Hola, ante todo les pido disculpas por tardarme en responder. La tarde de ayer fue espantosa porque mi hosting y todos mis sitios se cayeron de repente y hubo que migrar a otro servidor (sin mencionar la parte de lo dominios). Pero sí pude implementar la sugerencia de David (gracias viejo), la cual cumple con su función correctamente pero con el detalle que la frase sale duplicada.

Estoy usando este script: http://www.captain.at/howto-ajax-form-post-request.php

Básicamente tengo lo mismo en todo, excepto el tipo de formulario que son 2 select (y que por supuesto aproveché el array resultante para meterle una pequeña función). Pero hay algo que hace que la frase aparezca dos veces.

Cita:
Iniciado por GatorV
O usar un div flotante frente a la pagina que se oculte al terminar el request AJAX...
Esta idea también me pareció más que excelente. De hecho lo intenté apenas te leí, pero sólo funcionaba si hacía la llamada a otra capa fuera de .wpsi-contenedor Abandoné ese asunto porque mi intención era posicionar un gif de preload justo en medio de esa capa (como la precarga de los videos), pero -al encontrarse fuera- no fue posible, al menos hasta donde probé.

Saludos.
  #7 (permalink)  
Antiguo 07/07/2009, 22:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con cambio de estado

Es raro que aparezca dos veces. ¿Usaste insertBefore() o innerHTML para mostrarlo?

Por otro lado, fíjate que insertBefore() también te puede servir para agregar un elemento cualquiera (div, imagen, etc, creado con document.createElement) dentro de esa capa (con lo cual podrías aplicar la sugerencia de GatorV)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 08/07/2009, 10:19
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Duda con cambio de estado

También me resultó extraño lo del "clonado" .

Acabo de subirlo a remoto: http://tinyurl.com/n55qkz . Dejaré el error por un rato en caso de que deseen echarle un vistazo. Si lo hacen usen Firefox o cualquier otro navegador menos IE, pues aún me falta tapar sus acostumbradas cagadas con el CSS.
  #9 (permalink)  
Antiguo 08/07/2009, 14:27
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con cambio de estado

El "clonado" sucede debido a que dos veces al producirse el evento onreadystatechange el readyState es 1.

Puedes colocar el mensaje de "Cargando..." directamente al enviar la petición. O también, otra opción es poner un contenedor dentro de ese <div> y en el onreadystatechange cambiar el contenido de ese contenedor creado.

EDITO: Haciendo algunas pruebas pude constatar que eso ocurre debido a que asignas primero el evento onreadystatechange y después llamas al método open() (eso hace que dos veces se produzca el evento con el mismo valor para readyState), cambia el orden y debe solucionarse el problema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 08/07/2009 a las 14:37
  #10 (permalink)  
Antiguo 08/07/2009, 14:38
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Duda con cambio de estado

Gracias hermano, así lo haré .
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 02:36.