Cita:
en FireFox, obtiene un objeto element, pero en Internet Explore no funciona, devuelve 'null'. Que puede pasar? Cual es la solucion? Gracias objetoXMLHttpRequest.responseXML.documentElement
| ||||
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.. |
| ||||
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: 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 alert(objetus); //objeto XMLHttpRequest alert(objetus.responseXML); alert(objetus.responseXML.documentElement);
__________________ Solo hay 10 clases de personas, las que saben binario y las que no. |
| ||||
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 //#################################################################################### |
| ||||
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. |
| ||||
Cita: Observa estas dos páginas ahí utilizo responseXML , todo este código está hecho por mí
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 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(); ?> |
| ||||
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: 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. |
| ||||
loading............. para el responseXML del lado del servidor debes poner las cabeceras correspondientes identificando como un documento XML Código PHP: connection closed.
__________________ Maborak Technologies |
| |||
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; } |
| ||||
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>
Código:
Y el archivo .php que responde (respondo.php):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; } Código PHP:
__________________ .:Ju@nK:. |
| ||||
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: Código PHP: Código PHP: Código PHP: Última edición por mgusdl; 31/03/2008 a las 02:04 Razón: cambio etiquetas de codigo |
| ||||
Re: responseXML.documentElement no funciona en IE loading........... Bueno:
Suerte :D connection closed.
__________________ Maborak Technologies |
| ||||
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: Encima los mensajes de linea y caracter del IE sirven para lo mismo que el dinero en la LunaLine: L Character: C Code: 0 Error Message: El objeto no acepta esta propiedad o método URL: http://servidor/intranet/ Aun así muchas gracias por iluminarme en otros aspectos |
| ||||
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 |
| ||||
Re: responseXML.documentElement no funciona en IE loading............ Puedes crear el XML " A MANO" y pegarlo aca? que no te genere con la consulta SQL, crealo a mano. O bien pega el XML que devuelve tu consulta SQL. connection closed.
__________________ Maborak Technologies |
| ||||
Re: responseXML.documentElement no funciona en IE loading............ Oe pero si te falta poner la cabecera XML. Código PHP:
__________________ Maborak Technologies |
| ||||
Re: responseXML.documentElement no funciona en IE loading.............. obj.getElementsByTagName('individuo').length <-- cuanto te suelta? undefined? connection closed.
__________________ Maborak Technologies |
| ||||
Re: responseXML.documentElement no funciona en IE El XML que genera contiene datos privados, con lo que no puedo copiartelo alegremente aquí ya que violaría la LOPD (y más tratandose de una base de datos registrada). Si uso AJAX es porque la aplicacion no es accesible desde el exterior. Poniendo la cabecera que indicas la cosa no cambia, no obstante la dejaré porque es lo correcto. Además mi problema ahora viene al intentar obtener el numero de hijos del nodo, que en todos los navegadores me da un valor bueno y en IE me da 0. He probado con todas estas variantes, si bien sólo es correcta l a primera:
Código:
alert(obj.getElementsByTagName('nombrenodo').length);
Código:
alert(obj.getElementsByTagName('nombrenodo')[0].length);
Código:
alert(obj.getElementsByTagName('nombrenodo').childNodes.length);
Código:
alert(obj.getElementsByTagName('nombrenodo')[0].childNodes.length); Última edición por mgusdl; 11/03/2008 a las 11:12 Razón: no habia visto la respuesta anterior |
| ||||
Re: responseXML.documentElement no funciona en IE Bueno, he encontrado el origen de mi problema. Revisando el funcionamiento con el debugBar (www.debugbar.com) en IE no recibo el xml completo (alrededor de 30KB cuando no se establecen criterios de busqueda en la lista), mientras que en el resto de navegadores si lo cargan. Aqui una captura donde se ve como el XML no carga completo: Existe alguna forma de aumentar el buffer de lectura en IE mediante JavaScript?? Última edición por mgusdl; 12/03/2008 a las 03:03 Razón: para agregar la captura |
| ||||
Re: responseXML.documentElement no funciona en IE Es muy raro que no reciba todo el documento, no me he encontrado con ese problema y estuve buscando en Google y no hay mucha información al respecto. Creo lo mejor que puedes hacer es ir haciendo varios requests poco a poco... |
| ||||
Re: responseXML.documentElement no funciona en IE Cita: Si, eso lo he pensado, pero... A la hora de aplicar filtros, que es el principal motivo para cargar la informacion de manera asíncrona, la cosa se complica tela.En otras partes utilizo AJAX para activar/desactivar bloqueos sin recargar toda la página y no hay problema, pero en estos casos lo importante es la petición y la respuesta un "OK" o un mensaje parae el manejo de errores en la aplicación. En los escenarios de peso funciona correctamente cuando al pasar un filtro devuelve 4 o 5 filas (con 8, 10 campos cada fila), más de eso casca. Lo de la carga de XML "grandes" debe ser algo conocido cuando la gente de dthmlx lo pone como "feature": Ready to use solution for big datasets http://dhtmlx.com/docs/products/dhtmlxGrid/ Última edición por mgusdl; 12/03/2008 a las 11:25 Razón: ida de la olla |
| |||
Re: responseXML.documentElement no funciona en IE Por que no usas xajax mejor para???... es mucho mas sencillo y rapido... :si Última edición por GatorV; 12/03/2008 a las 15:31 |
| ||||
Re: responseXML.documentElement no funciona en IE Mmmm, porque no pruebas el script en otra maquina?, checa si te sirve y así podrás ver si el problema es tu IE local o en general el Internet Explorer... Saludos. |