Ho un sistema per popolare tag select dinamicamente in AJAX pescando dati da db con PHP tipo questo che avevo fatto a suo tempo:
http://forum.html.it/forum/showthrea...hreadid=974067
E fin qui va bene.
Supponiamo che all'ochange di una select voglia, oltre che popolare un'altra select, cambiare anche il contenuto di un div sempre con una connessione asincrona.
Non riesco a farlo funzionare.
Ho racchiuso la mia connessione asincrona in una funzione popolaElemento() riutilizzabile che riceve come parametri il nome dell'id del tag da popolare, il metodo GET|POST (al momento gestisco solo il get), l'indirizzo della pagina PHP a cui devo connettermi per pescare i dati, e una stringona di parametri vari che mando alla pagina come querystring:
codice:
function createRequestObj(){ // creo un'istanza XMLHttpRequest
var re;
var browser=navigator.appName;
if (browser=="Microsoft Internet Explorer"){ // sniff browser
re=new ActiveXObject("Microsoft.XMLHTTP");
} else re=new XMLHttpRequest();
return re;
}
var http=createRequestObj();
function popolaElemento(idElDaPopolare, paginaFonteDati, metodo, parametri){
var url=paginaFonteDati+"?" + parametri
http.open(metodo, url , true)
document.getElementById(idElDaPopolare).innerHTML="<img src=\"/immagini/ico/wait.gif\" />";
http.onreadystatechange=function(){
if (http.readyState==4 || http.readyState=="complete"){
if (http.status == 200){
document.getElementById(idElDaPopolare).innerHTML=http.responseText;
} else {
document.getElementById(idElDaPopolare).innerHTML="ERRORE "+http.status;
}
} // else document.getElementById(idElDaPopolare).innerHTML=http.readyState; // debug
}
http.send(null);
}
Ovviamente sulla mia select avrò due chiamate fatte così:
codice:
<select id="select1" onchange="popolaElemento('select2','popola.php','get','saluto=ciao'); popolaElemento('mioDiv','popola.php','get','saluto=buonanotte'); ">
<option>...</option>
</select>
Non funziona.
Viene popolato solo il tag che si trova prima nella pagina html, mentre nell'altro rimane l'immagine di caricamento. Non ricevo neanche un errore javascript.
Ho provato a fare una funzione popolaElemento2() esattamente uguale alla prima e a chiamare quella per popolare il div.
Ho provato a connettermi due pagine PHP diverse (per centralizzare il codice ne avevo fatta solo una con uno switch che in base alle variabili get visualizzav un contenuto piuttosto che un altro).
Ho provato ad assegnare la chiamata a due eventi diversi, uno su onchange e uno su onclick...
Nisba. Non funge.
Dev'essere qualcosa di intimo all'XMLHttpRequest che non so...
Nella seconda chiamata, http.readyState è 1 e non esegue l'if (http.readyState==4 || http.readyState=="complete")....
Potete aiutarmi?