AJAX - Problema con Ajax y XML

 
Vista:

Problema con Ajax y XML

Publicado por Mariah (5 intervenciones) el 04/07/2007 05:07:41
Hola, tengo un problema espero alguien pueda ayudarme porque me estoy volviendo loca, el escenario es el siguiente:

Existe una jsp que carga unos combos box de diferentes XML (no sé por qué lo hicieron así pero bueno) entonces con base en la técnica del prototype obtengo de la siguiente manera:

new Ajax.Request(sUrl,
{
method:'get',
onSuccess: function(transport){
var responseXML = transport.responseXML.documentElement;
setComboBene(responseXML);
}
});

El response del XML se le pasa a la funcion setComboBene, cuando llegó ahí le hago un responseXML.responseText para ver qué es lo que se está formando en el xml y el resultado es el siguiente:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<beneficiarios ren="1" sal="0" fecha="02/05/2007">
</beneficiarios>

Posteriormente hago lo siguiente:

var hola = responseXML.getElementsByTagName("beneficiarios")[0];
alert(hola);

Esperando que me traiga un objeto que pueda manipular como yo quiera sin embargo no trae nada... inicialmente me marcaba nulo, pero era porque no estaba poniendo la cabecera.... ahora de verdad que no sé qué está pasando si el responseText si me está trayendo el xml formado.... cabe destacar que he probado poniendo otros encoding.. pero nada...

¿alguna idea?

gracias anticipadas.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con Ajax y XML

Publicado por Gonzalo (26 intervenciones) el 04/07/2007 08:34:12
Una posibilidad es que no estés devolviendo el xml como xml.

Si no recuerdo mal, Prototype sólo te da el responseXML parseado si el Content-Type es "text/xml".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Mariah (5 intervenciones) el 04/07/2007 16:06:25
Hola Gonzalo, antes que nada muchas gracias por tu respuesta, pero la persona que programo la jsp que construye el xml está poniendo en el response el contenido que en este caso es el siguiente:

response.setContentType("text/xml; charset=iso-8859-1");
response.setHeader("Cache-Control", "no-cache");

Adicionalmente a esto, comento algo importante, también está incluyendo la directiva CDATA para que algunos caracteres no sean interpretados y pasen como texto plano del xml. Al usar esta directiva es necesario incluir algún tipo de encabezado especial? o ponerle otro tipo de encoding al html? o quizá anexar un dtd o schema específico?

La verdad es que ya me he estado sacando canas verdes porque con otros xml que son accesados de la misma manera y con el mismo procedimiento, no tienen ningún problema a excepción de este caso.

Nuevamente gracias por tu atención.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Gonzalo (26 intervenciones) el 04/07/2007 19:12:37
Supongo que habrás probado a poner sólo
response.setContentType("text/xml");
no?

De todos modos, en el XML del mensaje anterior no sale el CDATA para nada. ¿con qué XML exactamente haces las pruebas que fallan?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Mariah (5 intervenciones) el 05/07/2007 00:22:06
Hola Gonzalo, nuevamente gracias por responder, originalmente estaba planeado obtener el xml por medio de Ajax tradicional con la siguiente línea (el xml se ve más adelante):

function ajaxobj() {
if (window.ActiveXObject){//window.XMLHttpRequest) {
// we have IE
try {
_ajaxobj = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
_ajaxobj = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
_ajaxobj = false;
}
}
}
else if (window.XMLHttpRequest) {
//we have Mozilla, Opera or Safari
_ajaxobj = new XMLHttpRequest();
_ajaxobj.overrideMimeType('text/xml');
}
return _ajaxobj;
}

Posteriormente, hago lo siguiente en una función:

function getDiv(sUrl) {
//Cabe mencionar que la url es la jsp que arma el xml
// Instanciamos el objecto XMLHttpRequest
ajax = ajaxobj();
ajax.open("GET", sUrl , false);
// Indicamos que función vigila el cambio de estado
ajax.onreadystatechange=function() {
if (ajax.readyState == 4) {
setCombo(ajax.responseXML);
//alert(ajax.responseXML);
//en este alert trae el xml armado como lo muestro más adelante
alert(ajax.responseText);
}
}
// Enviamos algo para que funcione el proceso
ajax.send(null);
}

En la función setCombo tenemos:

function setValoresComboBeneficiarios(ajax){
var respuestaXML = ajax.responseXML;
var arbol = respuestaXML.getElementsByTagName("beneficiarios")[0];
alert(arbolBeneficiarios);
}

Sin embargo, en el getElementsByTagName marca nulo.... según esto, he leído que eso marca cuando no trae encabezado, pero sí se lo estoy poniendo... notas si hago algo mal?? El xml que proceso cuando pasa esto es el siguiente:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<beneficiarios renglon="1" saldo="0" fecha="02/05/2007">
<beneficiario>
<id-retiro><![CDATA[71788]]></id-retiro>
<id-ben><![CDATA[443]]></id-ben>
<id-ins><![CDATA[146578]]></id-ins>
<cuenta><![CDATA[123]]></cuenta>
<cla><![CDATA[555555555555555555555]]></cla>
<nom-iden><![CDATA[XXXX]]></nom-iden>
<coment><![CDATA[BAN, S.A.]]></coment>
<nom><![CDATA[PANCHITA SANCHEZ]]></nom>
<rfc>XXXX751121TA6</rfc>
</beneficiario>
<beneficiario>
<id-retiro><![CDATA[75879]]></id-retiro>
<id-ben><![CDATA[159]]></id-ben>
<id-ins><![CDATA[258741]]></id-ins>
<cuenta><![CDATA[125]]></cuenta>
<cla><![CDATA[555555666655555555]]></cla>
<nom-iden><![CDATA[XXXX87]]></nom-iden>
<coment><![CDATA[hola, S.A.]]></coment>
<nom><![CDATA[PANCHA REYES]]></nom>
<rfc>XXXX75112185O</rfc>
</beneficiario>
</beneficiarios>

Nuevamente gracias anticipadas.

Saludos.

Pd. Adicionalmente te comento que también lo intenté hacer con el procedimiento del prototype con el resultado que al llegar al getElementsByTagName no hace nada.... si es necesario tmb pongo el código, me dices....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Gonzalo (26 intervenciones) el 05/07/2007 09:34:28
Veo que tienes comentada esta línea:
//alert(ajax.responseXML);

Si la descomentas... ¿qué sale?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Mariah (5 intervenciones) el 05/07/2007 15:55:09
Hola Gonzalo gracias de nuevo, cuando descomento esa línea (alert(ajax.responseXML);) sale [object] lo cual quiere decir (así lo asumo) que si trae el XML.

Cabe mencionar que la razón por la cual lo estaba implementando con prototype es porque con esta versión no consigo que se vea en firefox y safari, pero ..... supongo que el detalle está en el xml porque se atora en la misma parte con ambos procesos.

Seguiré buscando la razón ojala se te ocurra una idea de qué está pasando....

:) muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Albert (1 intervención) el 08/11/2007 19:28:39
Hola,

yo tenia el mismo problema y creo que se la causa (pero no el porque).
Cuando se recuperan los datos con 'responseXML' y guardarlos en una variable, no sé porqué, cuando esta variable la pasas a un método, el contenido se pierde.

Prueba de realizar las operaciones pertinentes justo despues de recuperar los datos.

Si alguien sabe porqué sucede ésto, y las posibles soluciones, estariamos muy agradecidos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Mariah (5 intervenciones) el 08/11/2007 22:31:30
Hola Albert, ya tiene mucho que solucioné este problema, es raro el síntoma pero soluciona el problema, las jsp que están armando el XML deben tener forzosamente la directiva del XML en la parte superior aunque sea de manera estática... con eso se arregló el problema, curiosamente, algunas de mis jsp's no traían esa directiva... y funcionaban... raro pero así se arrelgó. Gracias de todas maneras por tu comentario. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Ajax y XML

Publicado por Danilo Hidalgo (1 intervención) el 03/05/2008 02:24:02
La propiedad responseXML se utiliza para tratar los datos recibidos en formato XML desde el servidor, podremos acceder a los datos siempre y cuando el estado de la conexión devuelto con readyStatechange sea igual a 4 (a punto).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar