Rispondo qui a marcelet che, in un messaggio privato, chiedeva codice ajax-asp sul solito problema regioni-province-comuni.
Rispondo qui e non in privato perchè credo che l'utilità di questo forum sta nella condivisione delle nostre esperienze.

Il codice è banale. La parte javascript fa uso della magnifica funzione ajax abc di Andrea Giammarchi, scaricabile qui:
http://webreflection.blogspot.com/20...asic-call.html

La parte server fa uso di asp: attenzione perchè, pur funzionando, è da qualche anno che non lo uso più e bisogna controllarlo bene.

Il database è Access. Ho messo le tabelle dei comuni e delle province, ma non sono aggiornatissime. Si può scaricare qui:
http://web.tiscali.it/archivio_esemp...nce_comuni.zip

Ed ecco il codice
codice:
<%@  language="VBScript" %>
<%
	option explicit
	
	Response.Buffer = true
	
	onload

%>
<!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>Regioni-province-comuni</title>
    <style type="text/css">
        body
        {
            font-family: Verdana, Helvetica, sans-serif;
        }
        select
        {
            width: 300px;
            height: 500px;
        }
        .contenitore
        {
            float: left;
            width: 300px;
            padding: 10px;
        }
    </style>

<script type="text/javascript" src="../../../js/abc.js"></script>


<script language="javascript" type="text/javascript">
// <!CDATA[
function regioni_onchange(v)
{
    var url = "?comando_ajax=recupera_province";
    var parametri = {codice_istat_regione:v.value};
    parametri.onLoad = onload;
    parametri.onError = onerror;
    
    ABC(parametri, url);
    
    function onload(request)
    {
        var t = request.responseText;
        document.getElementById("div_province").innerHTML = t;
        document.getElementById("comuni").options.length = 0;
    }
    

}

function province_onchange(v)
{
    var url = "?comando_ajax=recupera_comuni";
    var parametri = {codice_istat_provincia:v.value};
    parametri.onLoad = onload;
    parametri.onError = onerror;
    
    ABC(parametri, url);
    
    function onload(request)
    {
        var t = request.responseText;
        document.getElementById("div_comuni").innerHTML = t;

    }

}

function comuni_onchange(v)
{

}

function onerror(xhr, elapsedTime)
{
    alert("Errore di trasmissione: " + xhr.status);
}

// ]]>
</script>

</head>
<body>
    <h3>Regioni-Province-Comuni</h3>
    <div id="div_regioni" class="contenitore">
        regioni

        <select size="25" name="regioni" id="regioni" onchange="regioni_onchange(this);" ><%=regioni()%></select>
    </div>
    <div id="div_province" class="contenitore">
        province

        <select size="25" name="province" id="province" onchange="province_onchange(this);" style="width: 300px;">
        </select>
    </div>
    <div id="div_comuni" class="contenitore">
        comuni

        <select size="25" name="comuni" id="comuni" onchange="comuni_onchange(this);" style="width: 300px;">
        </select>
    </div>
</body>
</html>
<%

sub onload()
    dim comando_ajax
    
    comando_ajax = Request("comando_ajax")
    if(comando_ajax = "recupera_province") then
        recupera_province
    elseif(comando_ajax = "recupera_comuni") then
        recupera_comuni
    end if

end sub


function regioni()
    dim db, rs, sql

    set db = server.CreateObject("ADODB.Connection")
    set rs = server.CreateObject("ADODB.RECORDSET")

    db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 


    sql = "SELECT * FROM REGIONI"

    rs.Open sql, db, 3, 3
    dim s
    
    's = "<option value=""""></option>"
    do while not rs.EOF
	    s = s & "<option value=""" + rs(0) + """ >" & rs(1) & "</option>"
	    rs.MoveNext
    loop
    regioni = s
    
    rs.Close: set rs = nothing
    db.Close: set db = nothing

end function

sub recupera_province()
    dim codice_istat_regione
    codice_istat_regione = Request("codice_istat_regione")
    response.Clear
    response.Write province(codice_istat_regione)
    response.End
end sub

function province(codice_istat_regione)
    On error resume next
    
    dim db, rs, sql, s

    set db = server.CreateObject("ADODB.Connection")
    set rs = server.CreateObject("ADODB.RECORDSET")

    db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 


    sql = "SELECT * FROM Q_PROVINCE WHERE CODICE_ISTAT_REGIONE = """ & codice_istat_regione & """"
    rs.Open sql, db, 3, 3
    if Err.number <> 0 then
        province = "Errore: " & err.number & "
" & err.Description
        err.Clear
        exit function
    end if
    
    
    s = "province
<select size=""25"" name=""province"" id=""province"" onchange=""province_onchange(this);"" >"
    do while not rs.EOF
	    s = s & "<option value=""" + rs(0) + """ >" & rs(1) & "</option>"
	    rs.MoveNext
    loop
    s = s & "</select>"
    province = s
        
    rs.Close: set rs = nothing
    db.Close: set db = nothing

    if Err.number <> 0 then
        province = "Errore: " & err.number & "
" & err.Description
        err.Clear
        exit function
    end if
    
end function

sub recupera_comuni()
    dim codice_istat_provincia
    codice_istat_provincia = Request("codice_istat_provincia")
    response.Clear
    response.Write comuni(codice_istat_provincia)
    response.End
end sub

function comuni(codice_istat_provincia)
    On error resume next
    
    dim db, rs, sql, s

    set db = server.CreateObject("ADODB.Connection")
    set rs = server.CreateObject("ADODB.RECORDSET")

    db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\Regioni_province_comuni.mdb;User Id=admin;Password=;" 


    sql = "SELECT * FROM comuni WHERE codice_istat_provincia = """ & codice_istat_provincia & """"
    rs.Open sql, db, 3, 3
    if Err.number <> 0 then
        comuni = "Errore: " & err.number & "
" & err.Description
        err.Clear
        exit function
    end if
    
    
    s = "comuni
<select size=""25"" name=""comuni"" id=""comuni"" onchange=""comuni_onchange(this);"" >"
    do while not rs.EOF
	    s = s & "<option value=""" + rs(2) + """ >" & rs(3) & "</option>"
	    rs.MoveNext
    loop
    s = s & "</select>"
    comuni = s
        
    rs.Close: set rs = nothing
    db.Close: set db = nothing

    if Err.number <> 0 then
        province = "Errore: " & err.number & "
" & err.Description
        err.Clear
        exit function
    end if
    
end function

%>
ciao