Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/09/2008, 05:32
Langas
 
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) ;
}