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

AJAX: compatibilidad de IE

Estas en el tema de AJAX: compatibilidad de IE en el foro de Frameworks JS en Foros del Web. Holas. No sabia donde incluir esto, porque es de ajax y... Bueno en realidad se centra en javascript, por eso me he decidido por esto ...
  #1 (permalink)  
Antiguo 28/06/2005, 17:09
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
AJAX: compatibilidad de IE

Holas. No sabia donde incluir esto, porque es de ajax y... Bueno en realidad se centra en javascript, por eso me he decidido por esto

El caso es que tengo un ajax de dos documentos, asi sin mas, experimental:

trabajador.php: Se encarga de recoger los datos de una BD y publicarlos en XML para luego recogerlos.
Código PHP:
<?
    header
('Content-Type: text/xml');
    echo 
'<?xml version="1.0" standalone="yes"?>';
    
$id=$_GET["id"];
    include(
"../include.php");
    
$res=mysql_query("select * from articulos where id=".$id$link);
    
$row=mysql_fetch_array($res);
?>
<articulo>
    <id><?=$row["id"]?></id>
    <titulo><?=$row["titulo"]?></titulo>
    <fechahora><?=f_mysql2normal($row["fechahora"])?></fechahora>
    <categoria><?=$row["categoria"]?></categoria>
    <autor><?=$row["autor"]?></autor>
    <texto><![CDATA[ <?=$row["texto"]?> ]]></texto>
</articulo>
No tiene misterio.

index.php: Este se encarga de hacer las peticiones a trabajador.php
Código PHP:
<?
include("../include.php");
?>


<script language="javascript">

/* se encarga de crear el objeto httpObject */
function nuevoHttpObject(){
    var xmlhttp=false;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function cargarContenido(){
    //alert("cargando...");
    ajax=nuevoHttpObject();
    var elSelect=document.getElementById("elSelect");
    var elArticulo=document.getElementById("elArticulo");
    var elTitulo=document.getElementById("elTitulo");
    var laInfo=document.getElementById("laInfo");
    var laXapa=document.getElementById("laXapa");
    elId=elSelect.options[ elSelect.options.selectedIndex ].value;
    ajax.open("GET", "trabajador.php?id="+elId, true);
    ajax.onreadystatechange=function() {
        if (ajax.readyState==4) {        //listo
            elXML=ajax.responseXML;
            elTitulo.innerText=elXML.getElementsByTagName("titulo").item(0).firstChild.data;
            laInfo.innerText=elXML.getElementsByTagName("fechahora").item(0).firstChild.data;
            laXapa.innerHTML=elXML.getElementsByTagName("texto").item(0).firstChild.data;
        }
    }
    ajax.send(null);
}


</script>

</head>
<body>

<select id="elSelect" size="15" onchange="cargarContenido()">
    <?
        $res
=mysql_query("select id,titulo from articulos order by fechahora desc",$link);
        while(
$row=mysql_fetch_array($res)) {
            
?>
            <option value="<?=$row["id"]?>"><?=$row["titulo"]?></option>
            <?
        
}
    
?>
</select>
Bueno, no lo pongo entero, faltan las capas elTitulo, laInfo y laXapa que presentan la informacion recogida.

El caso es que funciona tanto en Opera como en Firefox a la perfeccion. En IE da un error javascript en estas tres lineas:
Código:
elTitulo.innerText=elXML.getElementsByTagName("titulo").item(0).firstChild.data;
laInfo.innerText=elXML.getElementsByTagName("fechahora").item(0).firstChild.data;
laXapa.innerHTML=elXML.getElementsByTagName("texto").item(0).firstChild.data; 
Es un error que no se como solucionarlo, porque he intentado combinaciones aleatorias sin resultado, y no se como trabajar el XML recibido con javascript.




Si me echais una manita, y encontrais alguna referencia para el XML en javascript estaré mas que satisfecho.

Un saludo y agradecimientos adelantados, que leer este post ya es muxo !
__________________
- 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 28/06/2005, 17:28
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Hola derkenuke:

¡Qué bien que tú también te estás animando con ajax!... Las pruebas que yo he hecho van por otras cosas, pero lo que encuentro distinto es .item(0)...

Verás, getElementsByTagName es un array, y como tal el índice basta con entrecorchetarlo (bonita palabra), por tanto en vez de item(0) yo pondría [0]

Por cierto, yo he probado la forma de crear objetos que aparece en el artículo traducido que está en maestrosdelweb... ¿Sabes si hay alguna diferencia?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 28/06/2005, 18:05
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Hola caricatos!

Pues es que probé un par de funciones.. Creo que te refieres a una que tiene comentarios con /* y */ y un par de @if y @elses que solo me hacian que ensuciar el codigo, y que encima no entiendo. Encontre esta, y la sustituí por que me gustaba mas, si quieres que te diga la verdad. No se muy bien todavia lo que hago en esto del AJAX.

Creo que no hay diferencia entre un [0] y un item(0), lo que hice fue un simple copy paste hasta poder entenderlo.

Si que me funciona, con un [0] y con un item(0). Lo que pasa es que es para contenido que no tiene nosequé. No se que es ese nosequé, pero seguire investigando. Tildes no son, lo he comprobado. Son las exclamaciones! si! Lo acabo de comprobar.

Y.. como lo solvento?
__________________
- 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 28/06/2005, 18:19
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Como me habia imaginado.. una funcion php para el trabajador.php que devuelva un documento libre de ¡ ! ¿ y ? ayuda a ir solucionando el problemita.

No puedo probar los anteriores articulos, por culpa de la cache del navegador. Recuerda los articulos cargados, y no hay nada que hacer, por mas que refresque la pagina, el xml enviado sera el mismo. Es otro problema añadido ese..
Si fuera HTML con un meta de caducidad... pero es XML, con php asi:
Código PHP:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
Ya es suficiente?

PD: Esto es solo para mí, la memoria cache viene que ni pintada para cualquier visitante...

Hay algun caracter mas raro para XML como ¡!¿? que alguien conozca, para esquivarlo?

gracias por responder.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 28/06/2005, 18:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Hola otra vez:

Lo de la caché, no sé si habrá solución, pero seguiremos probando...

Te muestro el código que yo he probado (el del artículo de maestrosdelweb.com):

Código:
var pedido;

function respuestaXML()	{
	if (pedido.readyState == 4)	{
		if (pedido.status == 200)	{
			datoTraido = pedido.responseXML.documentElement;

			alert("exito:\n" + datoTraido.getElementsByTagName('total')[0].firstChild.data);
		}
		else	{
			alert("error\n" + pedido.statusText);
		}
	}
}

function pedirXML(sitio)	{
	if (window.XMLHttpRequest)	{
		pedido = new XMLHttpRequest();
		pedido.onreadystatechange = respuestaXML;
		pedido.open("GET", sitio, true);
		pedido.send(null);
	}
	else
		if (window.ActiveXObject)	{
			pedido = new ActiveXObject("Microsoft.XMLHTTP");
			if (pedido)	{
				pedido.onreadystatechange = respuestaXML;
				pedido.open("GET", sitio, true);
				pedido.send();
			}
		}
}
Bueno, como suelo hacer, puse mis propias variables, y la petición la hago con la veriable pedido, y está puesta de manera global.

Has probado en declarar tu variable ajax de forma global: var ajax;

Lo mío por ahora está en mi "localhost", pero espero poder tenerlo operativo muy pronto.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 11:34.