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) ;
} 
  
 
