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

IE me tortura al traer el XML

Estas en el tema de IE me tortura al traer el XML en el foro de Frameworks JS en Foros del Web. Tengo un codigo muy sencillito, que funciona en Opera y en Firefox. Pero el maldito IE me dice que "El objeto no acepta esta propiedad ...
  #1 (permalink)  
Antiguo 23/08/2005, 18:06
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
IE me tortura al traer el XML

Tengo un codigo muy sencillito, que funciona en Opera y en Firefox. Pero el maldito IE me dice que "El objeto no acepta esta propiedad o método" en la linea que os dire luego, al analizar el XML. Codigo javascript:

Código PHP:
var req;
function 
loadXMLDoc(url) {
    
// branch for native XMLHttpRequest object
    
if (window.XMLHttpRequest) {
        
req = new XMLHttpRequest();
        
req.onreadystatechange processReqChange;
        
req.open("GET"urltrue);
        
req.send(null);
    
// branch for IE/Windows ActiveX version
    
} else if (window.ActiveXObject) {
        
req = new ActiveXObject("Microsoft.XMLHTTP");
        if (
req) {
            
req.onreadystatechange processReqChange;
            
req.open("GET"urltrue);
            
req.send();
        }
    }
}


function 
processReqChange() {
    
// only if req shows "complete"
    
if (req.readyState == 4) {
        
// only if "OK"
        
if (req.status == 200) {
              
// processing statements
              
response  req.responseXML.documentElement;
              
method response.getElementsByTagName('method')[0].firstChild.data;
              
hora response.getElementsByTagName('hora')[0].firstChild.data;
              
autor response.getElementsByTagName('autor')[0].firstChild.data;
              
texto response.getElementsByTagName('texto')[0].firstChild.data;
              
result response.getElementsByTagName('result')[0].firstChild.data;
              eval(
method+'("'+hora+'","'+autor+'","'+texto+'")');
        } else {
            
alert("There was a problem retrieving the XML data:\n" req.statusText);
        }
    }

Lo demas creo que es irrelevante.

Pues me da un error en la segunda funcion, a la hora de traer el autor. Es esta linea
Código PHP:
autor response.getElementsByTagName('autor')[0].firstChild.data
y no entiendo lo que hago mal. El caso es que la hora si la trae bien, puedo hacer un alert de ella sin problemas. La hora contiene un espacio, es el resultado de un microtime() de php.

Bueno si sirve de algo el XML es muy tonto:
Código PHP:
<?php
header
('Content-Type: text/xml');

$aut=$_GET["autor"];
$txt=$_GET["texto"];

$hora=microtime();

?>
<?php 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'?>
<response>
<method>agregaFila</method>
<hora><?=urlencode($hora)?></hora>
<autor><?=urlencode($aut)?></autor>
<texto><?=urlencode($txt)?></texto>
<result>1</result>
</response>
Sin mas, me vuelve loco el maltido IE :-p :-p
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 23/08/2005, 20:12
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola derkenuke:

Con explorer lo que a mi me ha pasado es que devolvía siempre la misma página aunque cambiase el código fuente...

Se arregla cerrando el navegador o cambiando la url (por ejemplo con algún parámetro que no se vaya a procesar...

prueba.php?fantasma=si

Si en vez de fantasma (que en teoría no existe) pones fantasmita o no en vez de si...

Espero que te sirva.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 25/08/2005, 07:32
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Hola caricatos qué tal:

El tipico argumento pasando un numero aleatorio no?

Creo que ya he visto de esos. Le he puesto asi:
Código PHP:
url="brazo.php?autor="+escape(aut)+"&texto="+escape(txt)+"&random="+Math.random()*1e17
Es muy cachondo el navegador este. Resulta que
Código PHP:
// processing statements
response  req.responseXML.documentElement;
method response.getElementsByTagName('method')[0].firstChild.data;
hora response.getElementsByTagName('hora')[0].firstChild.data;
//autor = "paco";//response.getElementsByTagName('autor')[0].firstChild.data;
//texto = "texto de paco";//response.getElementsByTagName('texto')[0].firstChild.data;
//result = 1;//response.getElementsByTagName('result')[0].firstChild.data;
//eval(method+'("'+hora+'","'+autor+'","'+texto+'")'); 
Ésto no da error. Pues bien, pongo el autor="paco", y me da error:
Código PHP:
autor "paco";//response.getElementsByTagName('autor')[0].firstChild.data; 
Asi que no se. De momento voy a dejar de desarrollar en ese navegador, no hace más que darme problemas. Siempre que hago algo con AJAX me pasa lo mismo...

será una estrategia de m$? jeje, ya veo conspiraciones por tos laos.

saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 31/08/2005, 00:31
 
Fecha de Ingreso: febrero-2003
Mensajes: 109
Antigüedad: 21 años, 2 meses
Puntos: 0
Yo estoy realizando una aplacion con AJAX y archivos XML y ya me encontré una serie de problemas como el que tu apuntas. No me preguntes por qué pero prueba a poner la linea
autor = "paco";//response.getElementsByTagName('autor')[0].firstChild.data;
sin el comentario del final. Hay veces que si la solución era quitarle el comentario a las líneas.
Yo estoy atrancado en el desarrollo pero por culpa de mozilla ya que no me lee el contenido de una etiqueta si le añado CDATA:
Código:
<cuerpo<![CDATA[ hola aquípuedo poner caracterews extrsños y no pasa nada]]></cuerpo>
, en cambio explorer si.
  #5 (permalink)  
Antiguo 31/08/2005, 07:28
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Sin el comentario del final? Asi dices?
Código PHP:
autor "paco"response.getElementsByTagName('autor')[0].firstChild.data
Muchas gracias juanpa!!! No es que funcione asi, pero
Código PHP:
//autor = "paco";
response.getElementsByTagName('autor')[0].firstChild.data
Milagrosamente si funciona, asi que deduje que el nombre de la variable no se por que no podia ser autor (sin embargo hora si que puede llamarse hora... ). Quedó asi la funcion de procesamiento:
Código PHP:
function processReqChange() {
    
// only if req shows "complete"
    
if (req.readyState == 4) {
        
// only if "OK"
        
if (req.status == 200) {
            
// processing statements
            
response  req.responseXML.documentElement;
            
method response.getElementsByTagName('method')[0].firstChild.data;
            
_hora response.getElementsByTagName('hora')[0].firstChild.data;
            
_autor response.getElementsByTagName('autor')[0].firstChild.data;
            
_texto response.getElementsByTagName('texto')[0].firstChild.data;
            
_result response.getElementsByTagName('result')[0].firstChild.data;
            eval(
method+'("'+_hora+'","'+_autor+'","'+_texto+'")');
        } else {
            
alert("There was a problem retrieving the XML data:\n" req.statusText);
        }
    }

Tambien estuve haciendo pruebas acerca de caracteres extraños y tal, pero no se me ocurrio el cdata. Que ocurre en mozilla? Lee la etiqueta vacia?
Luego que me era muy dificil pasar textos largos. Existe un limite de bytes que se pueden traer? (y llevar? creo que con el metodo GET son 255 caracteres, con POST ilimitado, a ver si alguien me lo aclara).

Ahora que puedo voy a seguir haciendo pruebas con CDATA, y te digo si consigo algo.


__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 31/08/2005, 07:35
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Pues a mi lo del CDATA me funcione en IE6, Opera8 y Firefox. Lo único es que con el IE, si le metes tildes o ñ, deja de funcionar: response es nulo o no es un objeto.

En Opera las tildes (y eñes) son devueltas como cuadraditos �, y en firefox como ?. Seran cosas del encoding. A ver si sigo investigando...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 31/08/2005, 07:38
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Eso es, si le pones al xml un encoding iso 8859-1 (si conoceis uno mejor me decis) funciona. La cabecera debe quedar asi
Código:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
Y enconces ya funcionan los CDATA tildes francesas eñes dieresis y la de dios.



__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #8 (permalink)  
Antiguo 31/08/2005, 11:47
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading.........


los problemas como esos lo solucioné en el servidor poniendo
Código PHP:
htmlspecialchars($dato); 


connection closed.
__________________

Maborak Technologies
  #9 (permalink)  
Antiguo 01/09/2005, 00:14
 
Fecha de Ingreso: febrero-2003
Mensajes: 109
Antigüedad: 21 años, 2 meses
Puntos: 0
A mi no me funciona

Pues yo sigo sin poden ver el CDATA e Mozilla.
EL código del XML es
Código PHP:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<pagina encabezado="Inicio" nombresecc=":: SECCIONES">
<caja><cuerpo>
    <![CDATA[
    hola hola hola
    ]]>
    </cuerpo>
</caja>
</pagina>
y cuando leo el xml
Código PHP:
cuerpon=xml_.getElementsByTagName('cuerpo')[i].firstChild.data;
alert(cuerpon
en explorer sin problema, en mozilla ni por casualidad. I need help, plis
  #10 (permalink)  
Antiguo 01/09/2005, 08:03
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Prueba a no dejar espacio entre <![CDATA[ y <cuerpo>, a mi me ha funcionado:

Código PHP:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<pagina encabezado="Inicio" nombresecc=":: SECCIONES"> 
    <caja>
        <cuerpo><![CDATA[ 
            hola hola hola 
        ]]></cuerpo> 
    </caja> 
</pagina>
En Opera Firefox y IE. He probao con poner espacios y creo que los demás da igual, pero entre CDATA y su etiqueta contenedora no puedes poner, tampoco se me ocurre la razón.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 02/09/2005, 00:05
 
Fecha de Ingreso: febrero-2003
Mensajes: 109
Antigüedad: 21 años, 2 meses
Puntos: 0
Pues mi tortuta con XML y AJAX termina aqui, tenias razón derkenuke, era que no hubiera espacio entre CDATA y su etiqueta contenedora.
Gracias y un saludo.
  #12 (permalink)  
Antiguo 03/09/2005, 10:29
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
La razon por la que no puede haber espacios me la encuentro en la pagina de DOM de caricatos:

Cita:
Una cosa a destacar en ésta página es el distinto tratamiento de los nodos de una página que hacen los distintos navegadores. En los navegadores basados en Mozilla se generan nodos "vacíos" si entre 2 etiquetas html hay un salto de línea o un espacio en blanco.
Asi que quizas si que se podria recoger con espacios.. pero con
.getElementsByTagName('cuerpo')[0].childNodes[1].data;
o algo asi.

Un lio, vamos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 00:22.