Carissimi, spero possiate risolvere un problema apparentemente banale che mi ha fatto dormire poche ore nelle ultime due notti (purtroppo ho il vizio di "non mollare" finché non riesco a completare qualcosa). Vi farò una descrizione precisissima.
Nella mia web application Java la mia pagina jsp presenta due caselle option, provincia e città. Via Ajax, la pagina jsp invia al server una richiesta asincrona appena si modifica la prima casella e riceve da una servlet l'elenco delle sole città compatibili con la provincia scelta popolando con il testo restituito le righe della seconda casella. In Firefox tutto funziona benissimo, ad esempio selezionando Roma nella prima, nella seconda option vedo tutte le province di Roma; in Explorer no, l'elenco della option è vuoto e non vedo nessuna riga.
Dubito che dipenda dal codice delle caselle option, in quanto altre caselle dello stesso tipo in altri punti del programma sono associate all'evento onclick di una specifica voce e l'evento desiderato (magari un semplice alert che si apre quando clicco su una delle option) si scatena tranquillamente anche in IE, anche se non si tratta di eventi Ajax.
Dubito che dipenda dalla servlet in quanto l'intera applicazione è popolata di servlet che richiamano i dati nel mededimo modo e tutti gli elenchi in tutte le pagine funzionano benissimo anche in IE.
Io sospetto che dipenda più dalla specifica funzione javascript che per qualche ragione è compatibile con tutto ma non con IE; ed allo scopo di avere un vostro parere ve la posto.
Grazie in anticipo, a prescindere dal risultato sarò gratissimo a chiunque abbia fatto anche solo un tentativo per darmi una mano.
codice:
function CreateXmlHttpReq(handler) {
var xmlhttp = null;
try {
xmlhttp = new XMLHttpRequest();
} catch(e) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttp.onreadystatechange = handler;
return xmlhttp;
}
function gCitta(prov) {
myRequest = CreateXmlHttpReq(myHandler);
myRequest.open("GET","ServletCittaSelect?prov=" + prov, true);
myRequest.send(null);
}
function myHandler() {
if (myRequest.readyState == 4 && myRequest.status == 200) {
document.getElementById("citta-rows").innerHTML = myRequest.responseText;
}
}