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