Il metodo idoneo è ajax (che nemmeno io sò utilizzare...)

Ma in una occasione ho aggirato il problema utilizzando una select di questo tipo (è tutto javascript quindi sono OT)

codice:
<html>
<head>
<SCRIPT>
<!--
var prov=new Array();
   prov[1]=new Array("Lecce","Foggia","Brindisi","Taranto","Bari");
   prov[2]=new Array("Potenza","Matera");
   prov[3]=new Array("Cagliari","Nuoro","Oristano");

var sigle=new Array()
   sigle[1]=new Array("LE","FG","BR","TA","BA");
   sigle[2]=new Array("PT","MT");
   sigle[3]=new Array("CA","NU","OS")

function Riempi(source)
   {
   with (document.modulo.output)
     {
     while (options.length > 0)
       options[0]=null;
     for (i=0;i<prov[source].length;i++)
       options[i]=new Option(prov[source][i],sigle[source][i])
     options.selectedIndex=0;
      }
   }
//-->
</SCRIPT>
</head>

<body>
<FORM NAME="modulo">
<SELECT NAME="input" onChange="Riempi(this.options.selectedIndex)">
	<OPTION></OPTION>
	<OPTION>Puglia</OPTION>
	<OPTION>Basilicata</OPTION>
	<OPTION>Sardegna</OPTION>
</SELECT>
<SELECT NAME="output">
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
<OPTION></OPTION>
</SELECT>
</FORM>
</body>
<html>
ATTENZIONE:
Nel codice che ho postato tra <option> e </option> viene ripetuto 10 volte & n b s p ; (senza spazi fra le lettere) solo che il mette gli spazi