Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 17-abr-2006, 05:50   #1 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
responseXML.documentElement no funciona en IE (replanteo el problema)

Si uso
Cita:
objetoXMLHttpRequest.responseXML.documentElement
en FireFox, obtiene un objeto element, pero en Internet Explore no funciona, devuelve 'null'. Que puede pasar? Cual es la solucion? Gracias
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por oskarL; 18-abr-2006 a las 09:24. Razón: Error en el titulo
oskarL está desconectado   Responder Citando
Antiguo 17-abr-2006, 16:40   #2 (permalink)
rafadc ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2005
Mensajes: 23
Edito: Cachis, leí mal. No he dicho nada
rafadc está desconectado   Responder Citando
Antiguo 17-abr-2006, 18:15   #3 (permalink)
B**
B** ha deshabilitado el karma
 
Avatar de B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Muestra tu codigo completo, talves tienes algun error a la hora de crear el objeto XMLHttpRequest.. me suena como a q solo creaste el objeto para firefox y no para exploiter.... pero igual y estoy equivocado, asi q mejor seria pusieras el codigo completo..
B** está desconectado   Responder Citando
Antiguo 18-abr-2006, 01:28   #4 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
Mejor no muestro todo el codigo, porque es demasiado, pero si que pongo la funcion con la que creo el objeto XMLHttpRequest, a ver si hay algun fallo. En principio lo hize para que funcionara con la mayoria de los navegadores, pero igual lo he hecho mal, no se...

Cita:
function objetus() {

var xmlhttp;

if (window.XMLHttpRequest) { // Mozilla, Safari,...
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

return xmlhttp;
}

Sinceramente no creo que ese sea el error, porque al hacer estos alerts
Cita:
alert(objetus); //objeto XMLHttpRequest
alert(objetus.responseXML);
alert(objetus.responseXML.documentElement);
En FireFox aparece '[objeto tal]' en los tres, y en Internet Explorer, sale '[objeto]' en los dos primeros, pero en el ultimo pone 'null'. Asi que parece que el objeto XMLHttpRequest esta bien... aunque a saber, jeje
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
oskarL está desconectado   Responder Citando
Antiguo 18-abr-2006, 03:17   #5 (permalink)
manolowarr está en el buen camino
 
Avatar de manolowarr
 
Fecha de Ingreso: septiembre-2005
Mensajes: 60
Así lo hago yo y me funciona bien


Código:
//####################################################################################
// AJAX manolowarr 2006

var ajax

var http_request

            function newAJAX() {

                http_request = false

                if (window.XMLHttpRequest) { // Mozilla, Safari,...
                    http_request = new XMLHttpRequest()
                    if (http_request.overrideMimeType) {
                        http_request.overrideMimeType('text/xml')
                    }
                }
				else if (window.ActiveXObject) { // IE
                    try {
                        http_request = new ActiveXObject("Msxml2.XMLHTTP")
                    }
					catch (e) {}
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP")
                    }
					catch (e) {}
                }				
                return http_request
            }


//####################################################################################

	var	titulo = ""

	function cargarAJAX( url ){
		titulo = url
		ajax = false
		ajax=new AJAX()
		ajax.onreadystatechange=CargarPag
		ajax.open('GET', url, true)
		ajax.send(null)
	}
//####################################################################################


    function CargarPag() {	

        if (ajax.readyState == 4) {
        if (ajax.status == 200) {		
	
		var xmldoc = ajax.responseText
		
		document.title = "Scripts Para Photoshop - " + titulo
		
	myweb.innerHTML =  xmldoc
		
        }//200		
      }//4
	}//function

//####################################################################################
__________________
----------------------------------------
visita mi página de plugins:

Photoshop-Scripts.com

-
manolowarr está desconectado   Responder Citando
Antiguo 18-abr-2006, 03:45   #6 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
Claro, pero tu haces un responseText para coger los datos. Yo quiero hacer un responseXML porque lo que recibo es un XML, y quiero usar el DOM del documento
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
oskarL está desconectado   Responder Citando
Antiguo 18-abr-2006, 04:43   #7 (permalink)
manolowarr está en el buen camino
 
Avatar de manolowarr
 
Fecha de Ingreso: septiembre-2005
Mensajes: 60
Cita:
Iniciado por oskarL
Claro, pero tu haces un responseText para coger los datos. Yo quiero hacer un responseXML porque lo que recibo es un XML, y quiero usar el DOM del documento
Observa estas dos páginas ahí utilizo responseXML , todo este código está hecho por mí

http://www.scriptsparaphotoshop.com/rss.html

http://www.scriptsparaphotoshop.com/rssB.html

Descárgalo y mira el código del archivo: AJAX4.js y AJAX4b.js, lo único que lleva de más es un php para abrir los rss externo al servidor.

Te pongo el código del php y lo demás lo puedes ver descargando las paginas


AJAX4.php
Código:
<?php
//RSS en AJAX manolowarr 2006
header('Content-type: text/xml');

$url=$_GET['id'];

function LeerArchivoEnviarAJAX(){

global $url, $Remoto_Archivo;

$Remoto_Archivo=file_get_contents($url);

echo $Remoto_Archivo;

}

LeerArchivoEnviarAJAX();

?>
__________________
----------------------------------------
visita mi página de plugins:

Photoshop-Scripts.com

-
manolowarr está desconectado   Responder Citando
Antiguo 18-abr-2006, 09:37   #8 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
Replanteo el problema...

Pues resulta que cogiendo un archivo xml directamente no tengo ningun problema...

Explico un poco lo que estoy haciendo.

Se trata de un script que busca en una base de datos en funcion de lo que se escriba en una caja de texto. Devuelve el resultado de manera interactiva, asi que por eso uso AJAX.

El caso es que la conexion que abro con AJAX es sobre un archivo php, que busca por el criterio de la caja de texto, y devuelve el resultado. Al principio recogia los datos con un responseText directamente, pero ahora que se un poco mas de XML estoy intentando usar su potencia, por eso lo que hago es escribir directamente etiquetas XML de esta manera: (en este archivo se escribe en una pagina una estructura XML)

Código PHP:
    include("config.php");
    mysql_connect($host,$user,$password);
    mysql_select_db($db);
    
        //nom es el contenido de la caja de texto
    if(isset($nom)){
        
            $query="SELECT * FROM referencias WHERE referencia LIKE '$nom%' ORDER BY referencia";
        
    }
    
    $datos.="<?xml version="1.0\" encoding=\"UTF-8\" ?>";
    
$datos.="<referencias>";
    
$rs=mysql_query($query);
    while(
$row=mysql_fetch_array($rs)){
        
$datos.="<referencia>";
        
$datos.="<id>".$row['id']."</id>";
        
$datos.="<nombre>".$row['referencia']."</nombre>";
        
$datos.="<categoria>".$row['categoria']."</categoria>";
        
$datos.="</referencia>";
    }
    
$datos.="</referencias>";
?>
<?php 
echo $datos?>
Utilizando responseXML.documentElement en FireFox, no tuve ningun problema, pero el contenido de esa instruccion en Internet Explorer es 'null'

Mas tarde probe a abrir la conexion de AJAX directamente con un XML, y ese problema ya no se daba.

Como puedo solucionar este problema? ya que en principio necesito abrir una conexion con un php para que me devuelva el XML con los datos apropiados... como puedo hacer esto??

Gracias!!!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
oskarL está desconectado   Responder Citando
Antiguo 18-abr-2006, 10:24   #9 (permalink)
MaBoRaK llegará a ser famoso muy prontoMaBoRaK llegará a ser famoso muy pronto
 
Avatar de MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 1.781
Enviar un mensaje por MSN a MaBoRaK
loading.............



para el responseXML del lado del servidor debes poner las cabeceras correspondientes identificando como un documento XML

Código PHP:
header("Content-Type: text/xml");
echo 
$resultado

connection closed.
__________________
maborak@maborak.com
http://www.maborak.com
Maborak technologies
MaBoRaK está desconectado   Responder Citando
Antiguo 19-abr-2006, 01:24   #10 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
Gracias MaBoRaK! una muy buena solucion!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por oskarL; 19-abr-2006 a las 03:09.
oskarL está desconectado   Responder Citando
Antiguo 11-jul-2006, 15:37   #11 (permalink)
rocamo ha deshabilitado el karma
 
Fecha de Ingreso: julio-2006
Mensajes: 10
De acuerdo Si funciona

Lo mas probable es que tengas problema con tu xml, ya que cuando esa mal hecho el sistema no lo reconoce
aca te muestro un ejemplo en donde

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<INICIO>
<ENCABEZADO>
<ID_SESION>19</ID_SESION>
</ENCABEZADO>
<ENCABEZADO>
<ID_SESION>20</ID_SESION>
</ENCABEZADO>
</INICIO>


var xml = oXML.responseXML.documentElement;
document.write('<table>');
for (i = 0; i < xml.getElementsByTagName('ENCABEZADO').length; i++){
var item = xml.getElementsByTagName('ENCABEZADO')[i];
var id = item.getElementsByTagName('ID_SESION')[0].firstChild.data;
}
rocamo está desconectado   Responder Citando
Antiguo 12-jul-2006, 01:29   #12 (permalink)
oskarL está en el buen camino
 
Avatar de oskarL
 
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 503
Gracias rocamo, pero el problema esta solucionado desde finales de Abril! jeje
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
oskarL está desconectado   Responder Citando
Antiguo 10-nov-2006, 13:38   #13 (permalink)
MarcoAntoine ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 29
Pues que a mí tb me haz salvado...todo por un ~%#@ encabezado...
MarcoAntoine está desconectado   Responder Citando
Antiguo 12-dic-2006, 06:01   #14 (permalink)
juank30 está en el buen camino
 
Avatar de juank30
 
Fecha de Ingreso: julio-2005
Mensajes: 29
Se que esta solucionado pero...

Hola según dicen en este foro el problema de trabajar con archivos XML en IE se soluciona con un Header, pero estoy hace unos dias que no puedo hacer correr este codigo en IE, es el mismo problema que se ha tenido desde el comienzo el responseXML.documentElement devuelve null y estoy poniendo la cabecera en el archivo php, aqui les pongo todo el codigo para que lo prueben, por favor diganme donde me equivoco:

Archivo html (books.html):
Código HTML:
<html>
  <head>
    <title>AJAX Foundations: JavaScript and XML</title>
    <script type="text/javascript" src="books.js"></script>
  </head>
  <body onload="process()">
    Server, tell me your favorite books!
    <br/>
    <div id="myDivElement" />
  </body>
</html>
Su javaScript (books.js):

Código:
var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject(){
  var xmlHttp;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
		xmlHttp = new XMLHttpRequest();
  if (xmlHttp.overrideMimeType) {
		xmlHttp.overrideMimeType('text/xml');
	}
	} else if (window.ActiveXObject) { // IE
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
  }
  return xmlHttp;
}

function process(){
  if (xmlHttp){
    try{
      xmlHttp.open("GET", "respondo.php", true);
      xmlHttp.onreadystatechange = handleRequestStateChange;
      xmlHttp.send(null);
    }
    catch (e){
      alert("Can't connect to server:\n" + e.toString());
    }
  }
}

function handleRequestStateChange(){ 
  if (xmlHttp.readyState == 4){
    if (xmlHttp.status == 200){
      try{
        handleServerResponse();
      }
      catch(e){
        alert("Error reading the response: " + e.toString());
      }
    } 
    else{
      alert("There was a problem retrieving the data:\n" + xmlHttp.statusText);
    }
  }
}

function handleServerResponse(){
  xmlRoot = xmlHttp.responseXML.documentElement;
  titleArray = xmlRoot.getElementsByTagName("title");
  isbnArray = xmlRoot.getElementsByTagName("isbn");
  var html = "";  
  for (var i=0; i<titleArray.length; i++)
    html += titleArray.item(i).firstChild.data + ", " + isbnArray.item(i).firstChild.data + "<br/>";
  myDiv = document.getElementById("myDivElement");
  myDiv.innerHTML = "Server says: <br />" + html;
}
Y el archivo .php que responde (respondo.php):

Código PHP:
<?
header
("Content-Type: text/xml"); 

echo 
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
echo 
"<response>";
echo 
"  <books>";
echo 
"    <book>";
echo 
"      <title>";
echo 
"        Building Reponsive Web Applications with AJAX and PHP";
echo 
"      </title>";
echo 
"      <isbn>";
echo 
"        1-904811-82-5";
echo 
"      </isbn>";
echo 
"    </book>";
echo 
"    <book>";
echo 
"         <title>";
echo 
"        Beginning PHP 5 and MySQL E-Commerce: From Novice to Professional";
echo 
"      </title>";
echo 
"      <isbn>";
echo 
"        1-59059-392-8";
echo 
"      </isbn>";
echo 
"    </book>";
echo 
"  </books>";
echo 
" </response>";
?>
Muchas Gracias.
__________________
.:Ju@nK:.
juank30 está desconectado   Responder Citando
Antiguo 11-mar-2008, 10:13   #15 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 176
Enviar un mensaje por Skype™ a mgusdl
Re: responseXML.documentElement no funciona en IE

Buenas, resucito este tema porque no encuentro solución y aquí por lo menos está el problema enfocado.

La cosa es que he probado en Safari para windows, Netscape 9, Opera 9 y Firefox 2.0.0.12 y funciona correctamente, pero en IE7 no :(

Os pongo el codigo a ver que opinais:

JS-> Creacion del objeto XML (funciona):
Código PHP:
function xmlobj(){
    if (
window.XMLHttpRequest) return new XMLHttpRequest();
    else if (
window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
    else 
alert('No se pudo crear el objeto XML');
    } 
JS -> Llamando al archivo (en rojo donde peta en IE)
Código PHP:
function mifuncion(id) {
    
cont document.getElementById('micontenedor');
    
cutChilds(cont); // Limpiar primero
    
xo xmlobj();
    
xo.open('GET''xml/xml_miarchivo.php?id=' id);
    
xo.onreadystatechange = function() {
      if (
xo.readyState == 4) {
      [
color="Red"]var obj  xo.responseXML.documentElement;[/color]
      if (
obj.getElementsByTagName('individuo').length 0) {
        for (
i=0i<obj.getElementsByTagName('individuo').lengthi++) {
          
tr document.createElement('tr');
          
td document.createElement('td');
          
td.appendChild(document.createTextNode(itm.getElementsByTagName('id')[0].firstChild.data));
          
tr.appendChild(td);
          
td document.createElement('td');
          
td.appendChild(document.createTextNode(itm.getElementsByTagName('nombre')[0].firstChild.data));
          
tr.appendChild(td);
          
cont.appendChild(tr);
          }
        }
      }
    }
    
xo.send('');
        } 
PHP -> Creacion del XML
Código PHP:
<?php
require "session.php";
require 
"config.php";
require 
"funciones.php";
header ("Content-type: text/xml; charset=ISO-8859-1");
$id intval($_GET['id']);
if (
$id == 0) die("Datos de entrada no validos");

echo 
"\n<respuesta>";

$sql "SELECT * FROM mitabla m WHERE id=$id"

$q mysql_query($sql) or die("\n\t<error>ERROR DE MySQL!!</error>\n</respuesta>");
$f mysql_num_fields($q);
if (
mysql_num_rows($q) == 0) echo "\n\t<error>No se devolvieron resultados</error>";
else while (
$a mysql_fetch_array($q)) {
    
$telefono $a['C_tel'];
    if (!
$a['C_tel']) $telefono " ";
    
$email $a['C_email'];
    if (!
$a['C_email']) $email " ";
    echo 
"\n\t<individuo>";
    echo 
"\n\t\t<id>{$a['id']}</id>";
    echo 
"\n\t\t<nombre>{$a['Nombre']}</nombre>";
    echo 
"\n\t</individuo>";
    }
echo 
"\n</respuesta>";
?>
JS -> Bonus, funcion para eliminar todos los nodos hijo
Código PHP:
function cutChilds(node) {
    if (
node.hasChildNodes()) while (node.childNodes.length >= 1node.removeChild(node.firstChild);
    } 
Lo del charset ya lo he probado en utf8 y nada. Encima se ven mal algunos caracteres porque la codificacion del HTML es ISO

Última edición por mgusdl; 31-mar-2008 a las 02:04. Razón: cambio etiquetas de codigo
mgusdl está desconectado   Responder Citando
Antiguo 11-mar-2008, 10:23   #16 (permalink)
MaBoRaK llegará a ser famoso muy prontoMaBoRaK llegará a ser famoso muy pronto
 
Avatar de MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 1.781
Enviar un mensaje por MSN a MaBoRaK
Re: responseXML.documentElement no funciona en IE

loading...........


Bueno:
  1. No olvides que los nodos que contengan caracteres especiales debes ponerlo dentro de un CDATA <nodoalgo><![CDATA[José iñahuasicuchidrill]]></nodoalgo>
  2. No es necesario xo.responseXML.documentElement; basta con xo.responseXML;
  3. No uses itm.getElementsByTagName('nombre')[0].firstChild.data usa itm.getElementsByTagName('nombre')[0].firstChild.nodeValue


Suerte :D


connection closed.
__________________
maborak@maborak.com
http://www.maborak.com
Maborak technologies
MaBoRaK está desconectado   Responder Citando
Antiguo 11-mar-2008, 10:37   #17 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 176
Enviar un mensaje por Skype™ a mgusdl
Re: responseXML.documentElement no funciona en IE

Ole! Muchas gracias por tu respuesta.

He cambiado estas 3 cosas que comentas en todas las funciones (más largas por contener más campos) y lo mismo, sigue funcionando en FF, pero en IE... :
Cita:
Line: L
Character: C
Code: 0
Error Message: El objeto no acepta esta propiedad o método
URL: http://servidor/intranet/
Encima los mensajes de linea y caracter del IE sirven para lo mismo que el dinero en la Luna

Aun así muchas gracias por iluminarme en otros aspectos
mgusdl está desconectado   Responder Citando
Antiguo 11-mar-2008, 10:51   #18 (permalink)
mgusdl tiene algunos puntos positivos de karma
 
Avatar de mgusdl
 
Fecha de Ingreso: abril-2007
Ubicación: Málaga, España
Mensajes: 176
Enviar un mensaje por Skype™ a mgusdl
Re: responseXML.documentElement no funciona en IE

Vale, haciendo debug (mediante intercalacion de alerts) el problema es otro, en la propiedad length :S

Investigaré esto un poco antes de preguntar de nuevo
mgusdl está desconectado   Responder Citando
Antiguo 11-mar-2008, 10:52   #19 (permalink)