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

Error en IE: Eñes y acentos en responseXML.documentElement

Estas en el tema de Error en IE: Eñes y acentos en responseXML.documentElement en el foro de Frameworks JS en Foros del Web. Buenas a todos. Llevo semanas intentando resolver un problema con AJAX en Internet Explorer y no hay manera. He consultado numerosos hilos al respecto y ...
  #1 (permalink)  
Antiguo 16/09/2008, 05:32
 
Fecha de Ingreso: enero-2007
Mensajes: 17
Antigüedad: 17 años, 11 meses
Puntos: 0
Error en IE: Eñes y acentos en responseXML.documentElement

Buenas a todos. Llevo semanas intentando resolver un problema con AJAX en Internet Explorer y no hay manera. He consultado numerosos hilos al respecto y he seguido las instrucciones, pero no hay manera, así que os cuento:

Mi página es una JSP con codificación iso-8859-1; en ella hay varios campos input y combos select que se rellenan dinámicamente. El problema es que cuando alguno de los valores de dichos campos contiene un carácter especial (ñ o tilde), el responseXML que me devuelve es null.

En cambio, el responseText sí que es correcto; por ejemplo, un alert('responseText: ' + XmlHttpObj.responseText) devuelve lo siguiente:

<data>
<datanode id="007 - BALEARES"><![CDATA[BALEARES]]></datanode>
<datanode id="008 - LA CORUÑA"><![CDATA[LA CORUÑA]]></datanode>
<datanode id="009 - LEÓN"><![CDATA[LEÓN]]></datanode>
<datanode id="012 - TENERIFE"><![CDATA[TENERIFE]]></datanode>
<data>

Lo que es correcto; pero, como ya he comentado, responseXML es null. Este problema sólo ocurre en IE, ya que en Firefox funciona correctamente.

Todas mis páginas JSP incluyen: response.setHeader("charset","iso-8859-1");

Os adjunto el código relevante de las funciones involucradas, agradeceré enormemente cualquier orientación. Un saludo.


// Evento de cambio del valor en un combo, que desencadena el cambio en el siguiente
function sociedadOnChange() {
var sociedad = document.getElementById("sociedad");
var selectedopcion1 = sociedad.options[sociedad.selectedIndex].value;
var requestUrl = "org_data.jsp" + "?filtro1=" + encodeURIComponent(selectedopcion1);

CreateXmlHttpObj();
if(XmlHttpObj)
{
XmlHttpObj.onreadystatechange = StateChangeHandler1;
XmlHttpObj.open( "POST", requestUrl, true );
XmlHttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
XmlHttpObj.setRequestHeader("Accept-Charset", "iso-8859-1");
XmlHttpObj.send('');
}
}

// StateChangeHandler
function StateChangeHandler1()
{
if(XmlHttpObj.readyState == 4)
{
if(XmlHttpObj.status == 200)
{
// Poblar los combos con sus posibles valores
Populatedirter(XmlHttpObj.responseXML.documentElem ent);

}
}
}

// Función que puebla en select con sus posibles valores
function Populatedirter(opcion2Node)
{
var dirter = document.getElementById("dirter");
for (var count = dirter.options.length-1; count >-1; count--)
{
dirter.options[count] = null;
}
if ((opcion2Node !== '')&&(opcion2Node !== null)){
dirter.disabled = false;
var opcion2Nodes = opcion2Node.getElementsByTagName("datanode");
var textValue;
var optionItem;
for (var count = 0; count < opcion2Nodes.length; count++)
{
textValue = GetInnerId(opcion2Nodes[count]);
optionItem = new Option( textValue, textValue, false, false);
dirter.options[dirter.length] = optionItem;
}
dirter.selectedIndex = -1;
} else {
dirter.disabled = true;
}
}

// Recupera el id de un nodo
function GetInnerId (node)
{
return (node.attributes.getNamedItem('id').value) ;
}
  #2 (permalink)  
Antiguo 18/09/2008, 05:57
 
Fecha de Ingreso: enero-2007
Mensajes: 17
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Error en IE: Eñes y acentos en responseXML.documentElement

He consultado a varias personas y seguido investigando, y la cosa está lejos de resolverse. Al contrario, cada vez es todo más raro.

Resulta que, en IE, si el XML a devolver contiene eñes o acentos, el responseXML está vacío, y responseXML.documentElement devuelve null. Pero es que si todo va bien (es decir, no hay eñes ni acentos)... ¡también está vacío! Es más, tanto responseXML como responseXML.documentElement están vacíos, y en cambio al invocar al método Populatedirter(opcion2Node), funciona correctamente... ¡a pesar de que opcion2Node está vacío!

Esto no es así en Firefox, donde responseXML devuelve un objeto XMLDocument, responseXML.documentElement devuelve un objeto Element. Y todo funciona correctamente, como ya dije en el anterior mensaje.

Por si esto no fuera bastante, resulta que no había incluido en el XML que devuelvo la cabecera <?xml version="1.0" encoding="iso-8859-1"?>. La incluyo, no fuera a ser eso... ¡¡y no funciona, ni en IE ni en Firefox!!

Yo ya estoy planteando ahorcarme. Por favor, cualquier ayudita será bien recibida.

Un saludo.
  #3 (permalink)  
Antiguo 18/09/2008, 06:49
Avatar de xenon87  
Fecha de Ingreso: agosto-2008
Mensajes: 26
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Error en IE: Eñes y acentos en responseXML.documentElement

http://www.forosdelweb.com/f26/acentos-n-no-hay-caso-xml-generado-con-php-382458/

Yo esta mañana me encontré con un problema similar.
Cargaba un xml con acentos a pelo (es decir, "áéáíó" a pelo en el código), y la respuesta ajax me los ejecutaba correctamente. En cambio, no me ejecutaba uno de los archivos porque en vez de tenerlos así, los ponia como "&aacute;".

Lo he solucionado poniéndolo todo a pelo en el código y ya está, aunque no me quedo muy satisfecho por tal solución.

En fin,se supone que el xml solo carga bien los acentos y 'eñes' con los carácteres hexadecimales en vez de los &ntilde;
  #4 (permalink)  
Antiguo 18/09/2008, 07:42
 
Fecha de Ingreso: enero-2007
Mensajes: 17
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Error en IE: Eñes y acentos en responseXML.documentElement

Gracias por la respuesta, xenon87, pero creo que no has entendido el problema: yo ya tengo generado el XML, el problema es del Internet Explorer, que no reconoce el objeto responseXML (aunque sí el responseText).

Ah, por cierto, la última gracia: la página que genera el XML (y que devuelve el objeto Ajax) se llama http://10.0.3.1:9080/itim/console....../org_data.jsp; bien, si yo introduzco la URL en el Internet Explorer, metiendo los parámetros correspondientes en el GET, lo que obtengo es:



No se puede mostrar la página XML
No se puede ver la entrada XML con la hoja de estilo XSL. Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde.

--------------------------------------------------------------------------------

Se encontró un carácter no válido en el contenido del texto. Error al procesar el recurso http://10.0.3.1:9080/itim/console...

<datanode id="015 - D.P. LA CORUNA"><![CDATA[015 - D.P. LA CORU



Es decir, casca en la 'Ñ' de 'LA CORUÑA'; fijaos que en el id la Ñ es una N, no casca ahí, sino en el CDATA. ¿No se supone que el CDATA permite los caracteres especiales?

Huelga decir que en Firefox funciona perfectamente.

¿Alguien tiene una soga?
  #5 (permalink)  
Antiguo 18/09/2008, 08:40
 
Fecha de Ingreso: enero-2007
Mensajes: 17
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Error en IE: Eñes y acentos en responseXML.documentElement

Solucionado. La clave estaba en colocar, en el archivo JSP, la línea:

<?xml version="1.0" encoding="iso-8859-1"?>

No en la segunda ni en la tercera ni mucho menos en la cuarta, sino en la PRIMERA, la primerísima línea de código.
  #6 (permalink)  
Antiguo 18/09/2008, 16:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Error en IE: Eñes y acentos en responseXML.documentElement

Mmm de hecho la especificación del XML te lo dice, el header del XML debe de ser la primera linea o de lo contrario hace un "fallback" a texto sin formato.

Saludos.
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 22:51.