ti mando una pagina scritta in modo prolisso, per uso didattico.
codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Pagina senza titolo</title>
<link href="../../stili/Styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function ListBox_regioni_onchange_get(v)
{
/*-----------------------------------------------------------------------
Qui faccio alcune operazioni prima di richiamare ajax.
Per esempio, disabilito la lista regioni, o rendo visibile una immagine
per indicare ajax al lavoro
------------------------------------------------------------------------*/
//disabilito la lista regioni
v.disabled = true;
//creo l'oggetto che fa la richiesta http
var objHTTP = null;
if(window.XMLHttpRequest)
{
// Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera, Internet Explorer 7
objHTTP = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
try
{
// Internet Explorer 6
objHTTP = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e)
{
// Internet Explorer 4,5
objHTTP = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Non è possibile creare l'oggetto che fa la richiesta http");
return;
}
//lista parametri da mandare via post nel formato
//variabile1=valore1&variabile2=valore2...
var parametri = "codice_istat_regione=" + escape(v.value);
/*-------------------------------------------------------------------------
La risorsa da richiedere è la pagina server che svolge i compiti richiesti.
Se è la medesima, si può usare ?.
Può naturalmente essere seguita da parametri.
In questo caso spedisco il parametro ajax_comando per dire alla pagina
cosa fare
--------------------------------------------------------------------------*/
var url = "ajax_in_action/regioni_provincie.aspx?ajax_comando=provincie";
//apertura connessione HTTP
//1° parametro, GET, POST, HEAD
//2° parametro, risorsa da richiedere: ? per richiamare la pagina medesima
//3° parametro, asincrona=true, sincrona=false
objHTTP.open("POST", url, true);
objHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
objHTTP.setRequestHeader('Content-length',parametri.length);
objHTTP.setRequestHeader('Connection', 'close');
/*--------------------------------------------------------------------------------
//impostazione della funzione di callback: in questo caso, la funzione è in linea.
//ma è possibile indicare il NOME della funzione. Per esempio:
//objHTTP.onreadystatechange = mia_funzione; //nota: senza parentesi finali
// e altrove, per esempio più sotto, definire la funzione:
//function mia_funzione(){...}
---------------------------------------------------------------------------------*/
objHTTP.onreadystatechange = function()
{
if (objHTTP.readyState == 4)
{
if (objHTTP.status != 200)
{
/*--------------------------------------------------------------------
Qui sono in errore, e faccio le opportune operazioni, per esempio,
riabilito i pulsanti disabilitati, messaggio di errore, etc...
---------------------------------------------------------------------*/
v.disabled = false;
alert("ERRORE NELLA TRASMISSIONE DATI!"
+ "\n\nreadyState:"
+ objHTTP.readyState
+ "\nstatus: "
+ objHTTP.status
+ "\nstatusText: "
+ objHTTP.statusText
+ "\n\nheaders:\n"
+ objHTTP.getAllResponseHeaders()
);
return;
}
/*--------------------------------------------------------------------
Qui ho ottenuto i dati dal server
o sotto forma di testo o html, con objHTTP.responseText
o sotto forma di xml, con objHTTP.responseXML
---------------------------------------------------------------------*/
var t = objHTTP.responseText;
//var tx = objHTTP.responseXML;
//creo la lista provincie
document.getElementById("div2").innerHTML = "Scegli la provincia:
" + t;
//riabilito la lista regioni
v.disabled = false;
}
};
//invio della richiesta, per GET e HEAD è null
objHTTP.send(parametri);
}
</script>
</head>
<body>
<form id="form1" action="?">
<div id="div1" style="float: left">
Scegli la regione:
<select name="regioni" id="regioni" onchange="ListBox_regioni_onchange_get(this);" style="height: 333px; width: 208px;" multiple="multiple">
<option value="13">ABRUZZO</option>
<option value="17">BASILICATA</option>
<option value="18">CALABRIA</option>
<option value="15">CAMPANIA</option>
<option value="08">EMILIA-ROMAGNA</option>
<option value="06">FRIULI-VENEZIA GIULIA</option>
<option value="12">LAZIO</option>
<option value="07">LIGURIA</option>
<option value="03">LOMBARDIA</option>
<option value="11">MARCHE</option>
<option value="14">MOLISE</option>
<option value="01">PIEMONTE</option>
<option value="16">PUGLIA</option>
<option value="20">SARDEGNA</option>
<option value="19">SICILIA</option>
<option value="09">TOSCANA</option>
<option value="04">TRENTINO-ALTO ADIGE</option>
<option value="10">UMBRIA</option>
<option value="02">VALLE D'AOSTA</option>
<option value="05">VENETO</option>
</select>
</div>
<div id="div2">
Scegli la provincia:
</div>
</form>
</body>
</html>