Foros del Web » Programando para Internet » Javascript »

A veces funciona, otras no...

Estas en el tema de A veces funciona, otras no... en el foro de Javascript en Foros del Web. Hola Tengo implementado un sistema de pestaña que me carga datos dinámicamenten a través de ajax y resulta que a veces funciona (la mayoría), pero ...
  #1 (permalink)  
Antiguo 25/11/2011, 13:10
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
A veces funciona, otras no...

Hola

Tengo implementado un sistema de pestaña que me carga datos dinámicamenten a través de ajax y resulta que a veces funciona (la mayoría), pero otras (aleatoriamente por lo visto) no funciona.

Yo trabajo siempre con este esquema:

En un fichero.js tengo:
Código Javascript:
Ver original
  1. // creando objeto XMLHttpRequest de Ajax
  2. function nuevoAjax()
  3. {
  4.     /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo*/
  5.     var xmlhttp=false;
  6.     try{
  7.         // Creacion del objeto AJAX para navegadores no IE
  8.         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  9.     }
  10.     catch(e){
  11.         try{
  12.             // Creacion del objeto AJAX para IE
  13.             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  14.         }
  15.         catch(E) { xmlhttp=false; }
  16.     }
  17.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); }
  18.  
  19.     return xmlhttp;
  20. }
  21.  
  22.  
  23. function cargar(pagina, categoria, modo) {
  24.     var url;
  25.     var obCon = document.getElementById('files');
  26.     var ajax = nuevoAjax();
  27.    
  28.     url = 'ver.php?_pagina='+pagina+'&c='+categoria+'&ajax=1&modo='+modo;
  29.    
  30.     $("#files").empty().html('<div class="loading"><img src="imgs/loading.gif" /></div>');
  31.  
  32.     ajax.open("GET", url); 
  33.  
  34.     ajax.onreadystatechange=function(){
  35.         if(ajax.readyState==4){
  36.             // Al recibir la respuesta coloco directamente el HTML en la capa contenedora
  37.             obCon.innerHTML=ajax.responseText;
  38.         }
  39.     }
  40.     ajax.send(null);
  41. }


En la página ejecuto la función cargar() a través de un evento (onclick) y el contenido se carga en el <div id="files"> como se puede ver en el código.

¿Alguien ve el error por algún lado?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 25/11/2011, 13:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: A veces funciona, otras no...

te recuerdo que debes evaluar también ajax.status==200, consulte un manual de AJAX
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 28/11/2011, 15:06
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: A veces funciona, otras no...

Crees que puede ser eso la causa de este fallo?

¿Cómo compruebo el error 200? No estoy muy al día con ajax.

Gracias.
  #4 (permalink)  
Antiguo 29/11/2011, 07:34
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: A veces funciona, otras no...

entonces: consulte un manual de AJAX, muchos tutoriales que he visto presentan ése error, y lo correcto es evaluar el status==200 (¡NO error!) después del readyState==4, además eso ni siquiera corresponde a AJAX, es parte del Protocolo HTTP
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 29/11/2011, 07:45
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: A veces funciona, otras no...

Sería de agradecer que si se trata de un simple IF me lo comentases aquí mismo en lugar de dirigirme a un manual....
Yo creo que para eso está el foro...

En fin.
  #6 (permalink)  
Antiguo 29/11/2011, 08:10
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: A veces funciona, otras no...

En el foro estamos para orientar y dar asesoría, además status==200 ¿a que se te parece?: a una expresión, por lo tanto debes de usar un if para evaluarla, ¿no te parece lógico?, el problema claro está es que muchos usuarios esperan que los demás les resuelvan todos los problemas, y hasta esperan que les den el código completo, eso va en contra del propósito de la comunidad, lo que esperamos es que los usuarios sean pro-activos y hallen las soluciones por su cuenta bajo la ayuda de nosotros los colaboradores, no hacerles el trabajo completo.

Siempre recomiendo los manuales debido a que te ofrecen la información completa, con los hechos y puntos necesarios para comprender el funcionamiento de las cosas, de modo que el usuario no se vea en la necesidad de postear una y otra vez dudas, de las cuales si adquiere el conocimiento, pueda resolver, yo también pasé por esa fase y mi objetivo es orientar a los demás en el mismo camino, no crear una generación foro-dependiente sino foro-colaborativa, saludos.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 30/11/2011, 08:12
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: A veces funciona, otras no...

Vale, bien, como suponía, se trataba de un simple if...

Ahora tengo esto:

Código Javascript:
Ver original
  1. function cargar(pagina, categoria, modo) {
  2.     var url;
  3.     var obCon = document.getElementById('files');
  4.     var ajax = nuevoAjax();
  5.    
  6.     url = 'ver.php?_pagina='+pagina+'&c='+categoria+'&ajax=1&modo='+modo;
  7.    
  8.     $("#files").empty().html('<div class="loading"><img src="imgs/loading.gif" /></div>');
  9.  
  10.     ajax.open("GET", url);  
  11.  
  12.     ajax.onreadystatechange=function(){
  13.         if(ajax.readyState==4){
  14.             if(ajax.status==200){
  15.                            obCon.innerHTML=ajax.responseText;
  16.                         }
  17.                 }
  18.     }
  19.     ajax.send(null);
  20. }

Y ahora me surgen 2 preguntas:

¿No hay que comprobar también el 304 para ver si ha cambiado el contenido, y si no, cargarlo de cache?

Y otra.
Me dice una persona que no le carga el contenido. No entra por el status 200. Solamente le pasa a esa persona. Al resto le funciona bien, tanto desde internet explorer, como safari, chrome, firefox... el iPod... etc.
¿Qué puede pasar?

Un saludo.
  #8 (permalink)  
Antiguo 30/11/2011, 08:18
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: A veces funciona, otras no...

¿esa persona tiene javascript activado?
  #9 (permalink)  
Antiguo 30/11/2011, 08:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: A veces funciona, otras no...

recuerda que también depende del readyState lo que quieres evaluar, tendrás que documentarte acerca del protocolo HTTP.

lo mejor que puedes hacer es comprobar la respuesta del server con herramientas como firebug, y ver que es lo que el servidor responde
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #10 (permalink)  
Antiguo 30/11/2011, 08:54
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: A veces funciona, otras no...

Qué es lo que depende del readyState???
Y acerca del 304 que dices? Hay que comprobarlo?

Y si, tiene activado Javascript.
  #11 (permalink)  
Antiguo 30/11/2011, 09:33
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: A veces funciona, otras no...

http://librosweb.es/ajax/capitulo7/m...tprequest.html

corresponde al manual:
http://librosweb.es/ajax/index.html
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

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 08:51.