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
ciaocodice:<%@ 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 %>![]()

Rispondi quotando