ciao a tutti!
ho una pagina con 3 combo.
se nella prima seleziono il classico valore "Tutti"
devo ricaricare le altre 2 combo con tutti i dati recuperati da DB.
dunque....
nel caso in cui debba aggiornare una sola combo funziona tutto bene, invece nel caso in cui le debba aggiornare tutte e 2 non funziona, è come se la prima richieste non aspettasse la sua conclusione per iniziare la seconso, di conseguenza, il valore di alcuni input hidden viene sovrascritto e non riesco più a interpretare il risultato della request.
considerato il fatto che non posso ridirre le chiamate ad una sola...avete qualche suggerimento?
vi posto il mio codice.
function findListFromCombo(strPage,strDeField,strControlNam e,strVisibleComboField) {
if (fgCallAjax == 0) {
var arrDeField = strDeField.split('#');
document.getElementById('ajaxControlList').value = strControlName;
document.getElementById('visibleComboField').value = strVisibleComboField;
document.getElementById(strDeField).disabled = true;
svuotaCombo(strControlName);
fgCallAjax = 1;
document.getElementById('ajaxDeField').value = strDeField;
document.getElementById('ajaxPageName').value = strPage;
var strParamUrl = '';
selIndex = document.getElementById(strDeField).selectedIndex;
if (document.getElementById(strDeField).options[selIndex].value == '') {
strParamUrl += strDeField+'=';
} else {
strParamUrl += strDeField+'='+escape(document.getElementById(strD eField).options[selIndex].value )+'&';
}
strParamUrl += '&ajaxDeField='+escape(document.getElementById('aj axDeField').value);
strParamUrl += '&visibleComboField='+strVisibleComboField;
strParamUrl += '&controlName='+strControlName;
var url = 'AjaxServletModule?PAGE='+strPage+'&'+strParamUrl;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject('Microsoft.XMLHTTP');
}
req.open('GET', url, true);
req.onreadystatechange = callbackList;
req.send(null);
document.getElementById(strDeField).disabled = false;
fgCallAjax = 0;
}
}
function callbackList() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessageList();
document.getElementById('ajaxControlList').value = '';
document.getElementById('visibleComboField').value = '';
}
}
}
function parseMessageList() {
listResult = req.responseXML.getElementsByTagName('result')[0];
if (listResult.childNodes[0].nodeValue == 'List') {
objComboName = document.getElementById('ajaxControlList').value;
objCombo = document.getElementById(objComboName);
listDataCombo = req.responseXML.getElementsByTagName('control_'+ob jComboName)[0];
listData = listDataCombo.getElementsByTagName('option');
arrField = document.getElementById('visibleComboField').value .split('_');
objCombo.options[0] = new Option('Tutti','');
if (listData.length>0) {
for (j=0;j<listData.length;j++) {
keyValue = listData[j].getElementsByTagName(arrField[0])[0].childNodes[0].nodeValue;
textValue = listData[j].getElementsByTagName(arrField[1])[0].childNodes[0].nodeValue;
objCombo.options[j+1] = new Option(textValue,keyValue);
}
}
}
}
function changeAssessorato() {
selAssessoratoIndex = document.getElementById('idAssessorato').selectedI ndex;
if (document.getElementById('idAssessorato').options[selAssessoratoIndex].value=='') {
svuotaCombo('idSegreteria');
findListFromCombo('SegreteriaPage','idDirezione',' idSegreteria','idSegreteria_deSegreteria');
document.getElementById('idSegreteria').readonly = false;
svuotaCombo('idDirezione');
findListFromCombo('DirezionePage','idSegreteria',' idDirezione','idDirezione_deDirezione');
document.getElementById('idDirezione').readonly = false;
} else {
svuotaCombo('idSegreteria');
objCombo = document.getElementById('idSegreteria');
objCombo.options[0] = new Option('Tutti','');
document.getElementById('idSegreteria').readonly = true;
svuotaCombo('idDirezione');
objCombo = document.getElementById('idDirezione');
objCombo.options[0] = new Option('Tutti','');
document.getElementById('idDirezione').readonly = true;
}
}
La parte di codice interessata che genera l'errore è:
svuotaCombo('idSegreteria');
findListFromCombo('SegreteriaPage','idDirezione',' idSegreteria','idSegreteria_deSegreteria');
document.getElementById('idSegreteria').readonly = false;
svuotaCombo('idDirezione');
findListFromCombo('DirezionePage','idSegreteria',' idDirezione','idDirezione_deDirezione');
document.getElementById('idDirezione').readonly = false;
grazie!