Foros del Web » Programando para Internet » Javascript »

funcion javascript con peticiones ajax no funciona en ie

Estas en el tema de funcion javascript con peticiones ajax no funciona en ie en el foro de Javascript en Foros del Web. Hola, hos comento un poco lo que deberia hacer el codigo, trata de una funcion que crea un archivo xml segun la opcion elejida en ...
  #1 (permalink)  
Antiguo 16/01/2012, 17:29
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
funcion javascript con peticiones ajax no funciona en ie

Hola, hos comento un poco lo que deberia hacer el codigo, trata de una funcion que crea un archivo xml segun la opcion elejida en un select, despues creo dos funciones mas una para abrir el xml de forma asincronica y otra para mostrar los nombres en pantalla de los empreados de una empresa con un intervalo de tiempo.

Pero cada vez que llamo a la funcion que me crea el archivo xml con los nuevos datos(me lo crea con los datos de una base de datos) esta funcion a la vez llama a otra funcion para mostrar los empreados en pantalla, el codigo funciona en todos los navegadores menos en ie, muestro codigo por si alguien puede ayudarme.

aqui estan las tres funciones que uso faltaria la de la instancia http request:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function recuperarEmpreados() {
  3.         var http = objetoAjax();
  4.         http.open('get','archivo.xml');
  5.         http.onreadystatechange = function() {
  6.                 if(http.readyState == 4){
  7.                if (http.status==200){
  8.                                 xml=http.responseXML;
  9.                                 if(xml.getElementsByTagName('empreado').length > 0){
  10.                     datosEmpreados();
  11.                                 }
  12.                          }
  13.                 }
  14.         }
  15.         http.send(null);
  16. }
  17. var pos = 0;
  18. function datosEmpreados(){
  19.     if(xml.getElementsByTagName('empreado').length>0){
  20.      document.getElementById("empreados").innerHTML ='<p>'+xml.getElementsByTagName('empreado')[pos].firstChild.nodeValue+'</p>';
  21.     pos++;
  22.   if(pos>=(xml.getElementsByTagName('title').length)){pos = 0}
  23.     }
  24. }
  25. window.onload = recuperarEmpreados;
  26. setInterval(datosEmpreados,1000);
  27.  
  28. function recuperarXML(dato) {
  29.    var peticion=objetoAjax();
  30.    peticion.open("get","recuperar_datos.php?seccion=" + dato , true);
  31.    peticion.onreadystatechange = function() {
  32.       if (peticion.readyState == 4 && (peticion.status == 200 || peticion.status == 501)){
  33.           document.getElementById('recuperar').innerHTML=peticion.responseText;
  34.           recuperarEmpreados();
  35.      
  36.       }
  37.    }
  38. peticion.send(null);
  39. }
  40. </script>

aqui el archivo php con el select y los div donde me tiene que mostrar los datos y recuperar el xml de forma asincronica:

Código HTML:
Ver original
  1.     <select id='seccion' onchange='recuperarXML(document.getElementsById("seccion").value)'>
  2.         <option value='administracion'>administracion</option>
  3.         <option value='comercial'>comercial</option>
  4.         <option value='taller'>taller</option>
  5.     </select>
  6. </form>
  7. <div id="recuperar"></div>
  8. <div id='empreados'></div>

El error que me da ie es que xml no esta definido esta linea:

if(xml.getElementsByTagName('empreado').length>0){

Espero que los espertos en javascript puedan ayudarme, saludos.

Última edición por pithon; 16/01/2012 a las 17:41
  #2 (permalink)  
Antiguo 16/01/2012, 18:08
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: funcion javascript con peticiones ajax no funciona en ie

buenas,
lo priimero que deberías revisar es la consola de iexplorer. con algo de suerte ahí puedes determinar que esta sucediendo. y segundo, aunque te funciona en otros navegadores, opino que esta mal implementado la forma en que inicias el proceso. en particular, tienes un intérvalo que se inicia tan pronto el interprete lo lee. luego tienes un proceso que inicia cuando el navegador termine de cargar el documento. ¿qué sucederia si la carga más la petición demora más de un segundo? la función datosEmpreados no tiene la suficiente información para trabajar, lo cual es equivalente a un error y por tanto el script colapsa. el intérvalo deberias invocarlo cuando el documento xml haya cargado con éxito. por supuesto, también debes velar de detener el intérvalo cuando cambies los datos xml. de lo contrario terminarias con infinidad de intérvalos.

pd: esto no viene absolutamente al caso... no se si sea tu lengua pero se escribe "empleado" y "experto".
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 16/01/2012, 18:30
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: funcion javascript con peticiones ajax no funciona en ie

Hola zerokilled, realmente no entendi muy bien como tendria que hacerlo, si pudieras ponerme un ejemplo, decirte tambien que el intervalo de tiempo lo puse de un segundo provisionalmente para probar, en realidad lo quiero de un periodo de tiempo mas largo, sobre la consola de ie me dio el error del la variable xml no definida, o no objeto, PD perdona por las faltas de ortografia, saludos.
  #4 (permalink)  
Antiguo 16/01/2012, 19:10
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: funcion javascript con peticiones ajax no funciona en ie

pues debe ser lo que comente. al momento de interpretarse la función datosEmpreados, el xml aún no ha cargado. respecto al intérvalo, simplemente ubicalo dentro del evento onreadystatechange y almacenas en una variable el identificador devuelto por setInterval. luego, cuando cambies los datos (función recuperarXML) detienes el intervalo con clearInterval y el identificador anterior.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 17/01/2012, 11:51
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: funcion javascript con peticiones ajax no funciona en ie

Hola zerokilled, intente aplicar al codigo lo que me dijistes pero no se si hice algo mal pero los intervalos no funcionan bien, creo que no se detienen, te muestro los cambios por si quieres ayudarme.

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     var pos=0;
  3.     var tiempo=null;
  4.     var xml=null;
  5.     function recuperarEmpreados() {
  6.             var http = objetoAjax();
  7.             http.open('get','archivo.xml');
  8.             http.onreadystatechange = function() {
  9.                     if(http.readyState == 4){
  10.                         if (http.status==200){
  11.                                 xml=http.responseXML;
  12.                              if(xml.getElementsByTagName('empreado').length > 0){
  13.                                      var tiempo=setInterval(datosEmpreados,1000);
  14.                                 }
  15.                             }
  16.                     }
  17.             }
  18.             http.send(null);
  19.     }
  20.     function datosEmpreados(){
  21.         if(xml.getElementsByTagName('empreado').length>0){
  22.          document.getElementById("empreados").innerHTML ='<p>'+xml.getElementsByTagName('empreado')[pos].firstChild.nodeValue+'</p>';
  23.         pos++;
  24.       if(pos>=(xml.getElementsByTagName('title').length)){pos = 0}
  25.         }
  26.     }
  27.  
  28.      
  29.     function recuperarXML(dato) {
  30.        var peticion=objetoAjax();
  31.        peticion.open("get","recuperar_datos.php?seccion=" + dato , true);
  32.        peticion.onreadystatechange = function() {
  33.           if (peticion.readyState == 4 && (peticion.status == 200 || peticion.status == 501)){
  34.             clearInterval(tiempo);
  35.               document.getElementById('recuperar').innerHTML=peticion.responseText;
  36.               recuperarEmpreados();
  37.          
  38.           }
  39.        }
  40.     peticion.send(null);
  41.     }
  42.     </script>

En fin cuando cargo la pagina el intervalo funciona bien pero al cambiar el xml, ya no cumple el intervalo que deberia, saludos.
  #6 (permalink)  
Antiguo 17/01/2012, 12:03
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: funcion javascript con peticiones ajax no funciona en ie

fijate que estas creando una variable local, de modo que no será visible por la otra función. me refiero a la variable tiempo (línea 13), quitale la declaración var.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 17/01/2012, 12:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: funcion javascript con peticiones ajax no funciona en ie

Hola zerokilled, gracias por correjirme, estaba tan saturado que ya no vi ese error, bueno ahora funciona bien, pero el problema de ie lo sigo teniendo, alguna idea de que puede ser, saludos.
  #8 (permalink)  
Antiguo 17/01/2012, 13:04
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: funcion javascript con peticiones ajax no funciona en ie

¿podrías poner un ejemplo en línea para analizar la situación? he vuelto a revisar el código y no le veo nada mal.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 17/01/2012, 14:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: funcion javascript con peticiones ajax no funciona en ie

Hola zerokilled, trabajo en modo local ya que estoy en proceso de aprendizaje por eso no puedo subir la pagina a la red, pero bueno hice algunas pruebas poniendo alert() en diferentes partes del codigo, algo como esto:

Código Javascript:
Ver original
  1. <script type='text/javascript'>
  2. var tiempo=null;
  3. alert(tiempo);
  4. function recuperarEmpreados() {
  5.             var http = objetoAjax();
  6. alert(http);
  7.             http.open('get','archivo.xml');
  8.             http.onreadystatechange = function() {
  9.                     if(http.readyState == 4){
  10.                         if (http.status==200){
  11.                                 xml=http.responseXML;
  12. alert(xml);
  13.                              if(xml.getElementsByTagName('empreado').length > 0){
  14.                                      var tiempo=setInterval(datosEmpreados,1000);
  15. alert(tiempo);
  16.                                 }
  17.                             }
  18.                     }
  19.             }
  20.             http.send(null);
  21.     }
  22. </script>
cuando cargo la pagina me salta el primer alert(tiempo), pero luego me salta directamente al otro alert(tiempo), saltandose los otros dos e incluso cuando el condicional no se cumple ya que no deberia haber datos en el xml; una vez en el codigo cargo otra vez la pagina y entonces saltan los otros tres alert(), aunque el ultimo alert(tiempo) se salta igual aunque no se cumpla el if, no se si con estos datos que te doy podras ayudarme, un saludo.
  #10 (permalink)  
Antiguo 17/01/2012, 16:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: funcion javascript con peticiones ajax no funciona en ie

un detalle adicional que acabo ver,
Código:
    <select id='seccion' onchange='recuperarXML(document.getElementsById("seccion").value)'>
Elements esta en plural y debe ser singular. y sobre el problema de iexplorer, se me hace la idea que iexplorer esta cargando desde la cache en lugar de enviar la petición directamente al servidor. prueba agregandole un parámetro adicional a la petición pero que este siempre sea de valor variable. por ejemplo, un timestamp.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 17/01/2012, 18:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: funcion javascript con peticiones ajax no funciona en ie

Hola zerokilled, tenias razon era problema de cache, le asigne un numero aleatorio y funciona bien, mil gracias nuevamente me has solucionado el problema que llevaba dias calentandome la cabeza, ya que soy novatillo, saludos.

Última edición por pithon; 18/01/2012 a las 07:50

Etiquetas: ajax, funcion, html, peticiones, 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 13:57.