Foros del Web » Programando para Internet » Javascript »

Fallo al cargar XML desde javascript

Estas en el tema de Fallo al cargar XML desde javascript en el foro de Javascript en Foros del Web. Buenas a todos. Tengo una cuestion a la que estoy dando vueltas y no consigo resolver. Tengo por un lado un archivo query.php que genera ...
  #1 (permalink)  
Antiguo 26/02/2009, 17:17
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 5 meses
Puntos: 1
Fallo al cargar XML desde javascript

Buenas a todos.

Tengo una cuestion a la que estoy dando vueltas y no consigo resolver.

Tengo por un lado un archivo query.php que genera el siguiente archivo xml:

Código:
<?xml version="1.0" encoding="utf-8" ?>
	<provincia>
		<nombre>Gerona</nombre>
		<idprovincia>1</idprovincia>
		<localidad>Ripoll</localidad>
	</provincia>
y, desde javascript, intento cargarlo y ejecutar un script con los datos obtenidos de la siguiente manera

Código:
function importaXML(archivo)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Tu navegador no puede manejar este script');
  }
xmlDoc.async=false;
xmlDoc.load(archivo);
return(xmlDoc);
}

function mostrarInfo(){
	xmlDoc=importaXML("query.php");
	var x = xmlDoc.getElementsByTagName("provincia")[0];
	alert(x.childNodes[0].firstChild.nodeValue);
}
de manera que, supuestamente, al llamar a mostrarInfo() deberia resultar en un alert que dijese "Gerona", que es el valor de childNodes[0], es decir, el tag "nombre". Sin embargo esto no me funciona. Firebug me dice que "x is undefined", pero no entiendo por que. No se si realmente el archivo no se carga, o estoy gestionando mal los datos que recibo.

¿Alguna idea de por que esta ocurriendo esto?

Saludossss
  #2 (permalink)  
Antiguo 26/02/2009, 23:13
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Fallo al cargar XML desde javascript

Cambiá esto:
Código:
function mostrarInfo(){
	xmlDoc=importaXML("test.php");
	var x = xmlDoc.getElementsByTagName("provincia")[0];
	alert(x.getElementsByTagName('nombre')[0].firstChild.data);
}
Sucede que los espacios y saltos de línea son interpretados como nodos. Igualmente, te recomiendo que no uses esto para leer XML, ya que no es compatible con todos los navegadores modernos. Mejor usar AJAX, que es casi lo mismo, y es mucho más compatible.
  #3 (permalink)  
Antiguo 27/02/2009, 10:10
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Fallo al cargar XML desde javascript

Gracias por la respuesta, Panino, pero no se soluciona el error así, ya que el fallo es que "x is undefined", luego cualquier cosa que aplique a esa variable simplemente no funcionará.

No obstante, ahora estoy usando ajax para descargar el archivo, pero sigue sin funcionar, dando otro error, que tambien me ocurrió anteriormente. El codigo es el siguiente:

Código PHP:
var peticion_ajax;

function 
descargaArchivo(url,funcion) { //funcion que se llamara onreadystatechange 
    // Obtener la instancia del objeto XMLHttpRequest
    
peticion_ajax inicializa_xhr();
    
    
// Preparar la funcion de respuesta
    
peticion_ajax.onreadystatechange funcion;
    
    
// Realizar peticion HTTP
    
peticion_ajax.open('GET'urltrue);
    
peticion_ajax.send(null);
}

function 
inicializa_xhr() {
    var 
objXML;
    
    try{
         
objXML = new ActiveXObject('Msxml2.XMLHTTP');
    }catch (
e1){
        try{
            
objXML = new ActiveXObject('Microsoft.XMLHTTP');
        }catch (
e2){
            
objXML false;
        }
    }
    
    if (
window.XMLHttpRequest)
        
objXML = new XMLHttpRequest();
    
    if (!
objXML && (typeof XMLHttpRequest != 'undefined'))
        
objXML = new XMLHttpRequest();
    return 
objXML;
}

function 
muestraInfo(){
    if(
peticion_ajax.readyState == && (peticion_ajax.status == 200 || window.location.href.indexOf("http")==-1)){
        var 
peticion_ajax.getElementsByTagName("provincia")[0];
        
alert(x.getElementsByTagName("nombre")[0].firstChild.nodeValue);
    }

El archivo xml es el mismo, luego haciendo descargaArchivo("query.php",muestraInfo) deberia aparecer un alert que dijese "Gerona". Sin embargo el error es "peticion_ajax.getElementsByTagName is not a function".

Este error ya me dio antes usando el otro metodo, pero no consigo hacer que funcione, ya que no logro saber donde esta el error.
  #4 (permalink)  
Antiguo 27/02/2009, 10:32
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Fallo al cargar XML desde javascript

Me respondo a mi mismo, aunque no para dar la solucion sino para detallar algo. La funcion muestraInfo() deberia ser:

Código PHP:
function muestraInfo(){
    if(
peticion_ajax.readyState == && (peticion_ajax.status == 200 || window.location.href.indexOf("http")==-1)){
       var 
peticion_ajax.responseXML.documentElement;
    
alert(x.getElementsByTagName("nombre").firstChild.nodeValue);
    }

Sin embargo, esto me da "x is null". A mi esto me hace pensar que puede que el archivo no se lea bien, pero si el valor de readyState es 4 y el de status es 200, no deberia haber ningun problema, ¿no?
  #5 (permalink)  
Antiguo 27/02/2009, 11:05
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Fallo al cargar XML desde javascript

No vi lo de ajax. Lo que posteé antes funciona correctamente (lo testeé antes de responderte). Fijate que el xml generado por php tenga los headers que correspondan y no haya errores de parseo. También estar testeándolo en un servidor web. Te dejo mis testeos para que veas:
Código PHP:
<?php 
ob_start
();
header("Content-type:text/xml");
echo 
'<';
?>
?xml version="1.0" encoding="utf-8" ?>
    <provincia>
        <nombre>Gerona</nombre>
        <idprovincia>1</idprovincia>
        <localidad>Ripoll</localidad>
    </provincia>
<?php ob_end_flush(); ?>
Código javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Documento sin t&iacute;tulo</title>
  6. </head>
  7.  
  8. <body>
  9. <script>
  10. function importaXML(archivo)
  11. {
  12. var xmlDoc;
  13. // code for IE
  14. if (window.ActiveXObject)
  15.   {
  16.   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  17.   }
  18. // code for Mozilla, Firefox, Opera, etc.
  19. else if (document.implementation && document.implementation.createDocument)
  20.   {
  21.   xmlDoc=document.implementation.createDocument("","",null);
  22.   }
  23. else
  24.   {
  25.   alert('Tu navegador no puede manejar este script');
  26.   }
  27. xmlDoc.async=false;
  28. xmlDoc.load(archivo);
  29. return(xmlDoc);
  30. }
  31.  
  32. function mostrarInfo(){
  33.     xmlDoc=importaXML("test.php");
  34.     var x = xmlDoc.getElementsByTagName("provincia")[0];
  35.     alert(x.getElementsByTagName('nombre')[0].firstChild.data);
  36. }
  37. mostrarInfo()
  38. </script>
  39. </body>
  40. </html>
  #6 (permalink)  
Antiguo 27/02/2009, 12:28
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Fallo al cargar XML desde javascript

Cita:
Iniciado por Panino5001 Ver Mensaje
Fijate que el xml generado por php tenga los headers que correspondan y no haya errores de parseo.
Era justamente esto, habia olvidado los headers

Muchisimas gracias por la ayuda
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 04:55.