Select dinamiche con ASP & AJAX

Fulvio59

Nuovo Utente
3 Gen 2009
24
0
1
Salve a tutti,

ho letto l'articolo "Select dinamiche di regioni e province con ASP ed AJAX" e volevo estenderlo anche ai comuni, ma non conosco ajax e non so bene come fare.
Potete darmi qualche indicazione ?

Grazie in anticipo.
 
E' sempre l'esempio da cui sono partito io (Regioni e province), ma io cercavo di estenderlo ai comuni.
 
Vedo che i miei tutorial continuano a mietere vittime :)

La soluzione più veloce è "clonare" lo script AJAX, rinominando i nomi di funzioni e variabili, ed anche dell'ID dell'oggetto HTML di output.

Quella più elegante sarebbe parametrizzare un'unica funzione e configurarla (con delle condizioni interne) in modo da essere espandibile ad N livelli.

Dov'è che ti blocchi?
 
Ciao grazie della risposta,

mi blocco quando, dopo aver selezionato la regione ed ottenuto il filtro sulla combo della provincia, seleziono la provincia.
La selezione non mi da alcun risultato, non riesco a filtrare da provincia a comune.


Ti posto il codice come ho provato a modificarlo.

Lo script aggiunto è:
comuni.asp

Gli script modificati sono
form.asp
italia.js


FORM.ASP

<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
Call CnOpen()
%>
<html>
<head>
<title>Selezione di Regioni e Province con ASP ed AJAX</title>
<script type="text/javascript" src="italia.js"></script>
</head>
<body>

<form name="italia">

<select name="regioni" onchange="Province(this.value)">
<option value="0"></option>
<%
Dim SQL
SQL = "SELECT * FROM regioni ORDER BY reg_nome ASC"
rs.Open SQL, cn, 1
While rs.EOF = False
%>
<option value="<%=rs("reg_id")%>"><%=rs("reg_nome")%></option>
<%
rs.MoveNext
Wend
rs.Close
%>
</select>

<br><br>
<div id="risultati">
<select name="province" onchange="Comuni(this.value)">
<option value="0"></option>
<%
Dim SQL1
SQL1 = "SELECT * FROM province ORDER BY pro_nome ASC"
rs.Open SQL1, cn, 1
While rs.EOF = False
%>
<option value="<%=rs("pro_id")%>"><%=rs("pro_nome")%></option>
<%
rs.MoveNext
Wend
rs.Close
%>
</select>

<select name="comuni" >
<option value="0"></option>
<%
Dim SQL2
SQL2 = "SELECT * FROM comuni ORDER BY com_nome ASC"
rs.Open SQL2, cn, 1
While rs.EOF = False
%>
<option value="<%=rs("com_id")%>"><%=rs("com_nome")%></option>
<%
rs.MoveNext
Wend
rs.Close
%>
</select>

</div>

</form>

</body>
</html>
<%
Call CnClose()
%>




ITALIA.JS


var XMLHTTP;

function Province(ID)
{
if (parseInt(ID) > 0)
{
var url = "province.asp?id=" + ID;
XMLHTTP = RicavaBrowser(CambioStato);
XMLHTTP.open("GET", url, true);
XMLHTTP.send(null);
}
else
{
document.getElementById("risultati").innerHTML = "";
}
}

function Comuni(ID)
{
if (parseInt(ID) > 0)
{
var url = "comuni.asp?id=" + ID;
XMLHTTP = RicavaBrowser(CambioStato);
XMLHTTP.open("GET", url, true);
XMLHTTP.send(null);
}
else
{
document.getElementById("risultati").innerHTML = "";
}
}


function CambioStato()
{
if (XMLHTTP.readyState == 4)
{
var R = document.getElementById("risultati");
R.innerHTML = XMLHTTP.responseText;
}
}


function RicavaBrowser(QualeBrowser)
{
if (navigator.userAgent.indexOf("MSIE") != (-1))
{
var Classe = "Msxml2.XMLHTTP";
if (navigator.appVersion.indexOf("MSIE 5.5") != (-1));
{
Classe = "Microsoft.XMLHTTP";
}
try
{
OggettoXMLHTTP = new ActiveXObject(Classe);
OggettoXMLHTTP.onreadystatechange = QualeBrowser;
return OggettoXMLHTTP;
}
catch(e)
{
alert("Errore: l'ActiveX non verrà eseguito!");
}
}
else if (navigator.userAgent.indexOf("Mozilla") != (-1))
{
OggettoXMLHTTP = new XMLHttpRequest();
OggettoXMLHTTP.onload = QualeBrowser;
OggettoXMLHTTP.onerror = QualeBrowser;
return OggettoXMLHTTP;
}
else
{
alert("L'esempio non funziona con altri browser!");
}
}




PROVINCE.ASP



<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
Dim id
id = Request.QueryString("id")
If IsNumeric(id) = False Or id < 1 Then
Response.Write "Selezionare una regione valida!"
Response.End
End If
Call CnOpen()
Dim SQL
SQL = "SELECT * FROM province "
SQL = SQL & "WHERE pro_regione = " & id & " "
SQL = SQL & "ORDER BY pro_nome ASC"
rs.Open SQL, cn, 1
If rs.EOF Then
Response.Write "Selezionare una regione valida!"
Else
%>
<select name="regioni">
<option value="0"></option>
<%
While rs.EOF = False
%>
<option value="<%=rs("pro_id")%>"><%=rs("pro_nome")%></option>
<%
rs.MoveNext
Wend
%>
</select>
<%
End If
rs.Close
Call CnClose()
%>





COMUNI.ASP



<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
Dim id
id = Request.QueryString("id")
If IsNumeric(id) = False Or id < 1 Then
Response.Write "Selezionare una provincia valida!"
Response.End
End If
Call CnOpen()
Dim SQL
SQL = "SELECT * FROM comuni "
SQL = SQL & "WHERE com_provincia = " & id & " "
SQL = SQL & "ORDER BY com_nome ASC"
'Response.Write sql
'Response.end

rs.Open SQL, cn, 1
If rs.EOF Then
Response.Write "Selezionare una provincia valida!"
Else
%>
<select name="province">
<option value="0"></option>
<%
While rs.EOF = False
%>
<option value="<%=rs("com_id")%>"><%=rs("com_nome")%></option>
<%
rs.MoveNext
Wend
%>
</select>
<%
End If
rs.Close
Call CnClose()
%>


Grazie in anticipo
 
Vedo che le combo delle province e dei comuni si trovano nell'unico div "risultati".

Prova a creare due div:

<div id="ris_province">
<select>
...
</select>
</div>

<div id="ris_comuni">
<select>
...
</select>
</div>

lavorando di conseguenza con gli script.

Fammi sapere!
 
Ho modificato lo script form.asp come mi hai indicato,

poi ho modificato itaia.js come segue:

var XMLHTTP;

function Province(ID)
{
if (parseInt(ID) > 0)
{
var url = "province.asp?id=" + ID;
XMLHTTP = RicavaBrowser(CambioStatoProv);
XMLHTTP.open("GET", url, true);
XMLHTTP.send(null);
}
else
{
document.getElementById("ris_province").innerHTML = "";
}
}

function Comuni(ID)
{
if (parseInt(ID) > 0)
{
var url = "comuni.asp?id=" + ID;
XMLHTTP = RicavaBrowser(CambioStatoCom);
XMLHTTP.open("GET", url, true);
XMLHTTP.send(null);
}
else
{
document.getElementById("ris_comuni").innerHTML = "";
}
}


function CambioStatoProv()
{
if (XMLHTTP.readyState == 4)
{
var R = document.getElementById("ris_province");
R.innerHTML = XMLHTTP.responseText;
}
}

function CambioStatoCom()
{
if (XMLHTTP.readyState == 4)
{
var R = document.getElementById("ris_comuni");
R.innerHTML = XMLHTTP.responseText;
}
}

function RicavaBrowser(QualeBrowser)
{
if (navigator.userAgent.indexOf("MSIE") != (-1))
{
var Classe = "Msxml2.XMLHTTP";
if (navigator.appVersion.indexOf("MSIE 5.5") != (-1));
{
Classe = "Microsoft.XMLHTTP";
}
try
{
OggettoXMLHTTP = new ActiveXObject(Classe);
OggettoXMLHTTP.onreadystatechange = QualeBrowser;
return OggettoXMLHTTP;
}
catch(e)
{
alert("Errore: l'ActiveX non verrà eseguito!");
}
}
else if (navigator.userAgent.indexOf("Mozilla") != (-1))
{
OggettoXMLHTTP = new XMLHttpRequest();
OggettoXMLHTTP.onload = QualeBrowser;
OggettoXMLHTTP.onerror = QualeBrowser;
return OggettoXMLHTTP;
}
else
{
alert("L'esempio non funziona con altri browser!");
}
}


Ora mi compaiono tutte le tre combo, ma quando seleziono la provincia continua a non filtrare i comuni in base alla provincia.
 
la mia sensazione è che non entri non funzioni l'evento onchange relativo alla select delle province, quello, per intenderci, che chiama la funzione javascript Comuni().
Dico questo perché ho provato ad inserire un alert all'inizio della funzione ma non appare;
inoltre se nell'url incollo brutalmente comuni.asp?id=58, mi restituisce i comuni di quella provincia.

Qualche idea?
 
Riesci ad allegare il lavoro in formato ZIP?

Tenta comunque di eliminare inclusioni varie e cose che non c'entrano con lo script nudo e crudo (completo solo nel senso in oggetto).
 
select dinamica con comuni

Ciao,
ho seguito lo script che hai postato in allegato (formato zip) però la select non aggiorna i campi dei comuni. Credo che ci sia qualcosa che non va nel database.
Ti posto il mio db... puoi darmi una mano? Grazie
ciao
 

Allegati

Discussioni simili