Guarda se ti va bene questo esempio:
regioni_province_comuni.asp
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 = {id_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 = {id_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 id_regione, nome_regione FROM REGIONI where id_regione > 0 order by nome_regione"
rs.Open sql, db, 3, 3
dim s
's = "<option value=""""></option>"
do while not rs.EOF
s = s & "<option value=""" + cstr(rs(0)) + """ >" & cstr(rs(1)) & "</option>"
rs.MoveNext
loop
regioni = s
rs.Close: set rs = nothing
db.Close: set db = nothing
end function
sub recupera_province()
dim id_regione
id_regione = Request("id_regione")
response.Clear
response.Write province(id_regione)
response.End
end sub
function province(id_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 id_provincia, nome_provincia FROM province WHERE id_provincia > 0 and id_regione = " & id_regione & " order by nome_provincia"
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=""" + cstr(rs(0)) + """ >" & cstr(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 id_provincia
id_provincia = Request("id_provincia")
response.Clear
response.Write comuni(id_provincia)
response.End
end sub
function comuni(id_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 id_comune, nome_comune FROM comuni WHERE id_comune > 0 and id_provincia = " & id_provincia & " order by nome_comune"
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=""" + cstr(rs(0)) + """ >" & cstr(rs(1)) & "</option>"
rs.MoveNext
loop
s = s & "</select>"
comuni = s
rs.Close: set rs = nothing
db.Close: set db = nothing
if Err.number <> 0 then
comuni = "Errore: " & err.number & "
" & err.Description
err.Clear
exit function
end if
end function
%>
abc.js
codice:
/** ABC - Ajax Basic Call
* @author Andrea Giammarchi
* @site www.devpro.it */
ABC = (function(ABC){
return function(data, url, async, user, pass){
var time = new Date,
abc = ABC(),
send = [],
key = null;
if(data){
for(key in data)
if(typeof data[key] !== "function" && data.hasOwnProperty(key)){
if(data[key] instanceof Array)
for(var i = 0; i < data[key].length; i++)
send.push(encodeURIComponent(key).concat("=", encodeURIComponent(data[key][i])));
else
send.push(encodeURIComponent(key).concat("=", encodeURIComponent(data[key])));
}
key = 0 < send.length ? send.join("&") : null;
};
abc.open(
key !== null ? "POST" : "GET",
url,
async = async === undefined ? true : !!async,
user !== undefined && user,
pass !== undefined && pass
);
abc.setRequestHeader("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT");
abc.setRequestHeader("Cache-Control", "no-cache");
abc.setRequestHeader("X-Requested-With", "XMLHttpRequest");
if(key !== null)
abc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
if(async)
abc.onreadystatechange= function(){
if(abc.readyState === 4 && data){
key = /^(2|3)[0-9]{2}$/.test(abc.status) ? "onLoad" : "onError";
if(typeof data[key] === "function")
data[key](abc, new Date - time);
}
};
abc.send(key);
return abc;
};
})(this.XMLHttpRequest ?
function(){return new XMLHttpRequest;} :
function(){return new ActiveXObject("Microsoft.XMLHTTP");}
);