128 messaggi dal 01 febbraio 2006
Ciao a tutti,

ho creato una pagina in cui ci sono due combo.
La scelta della prima dovrebbe caricare la seconda combo, utilizzando Ajax.
Ottengo però un errore non definito e non riesco ad uscirne. Qualcuno mi può aiutare? Per comodità posto il codice:

<script language="javascript">
var ricerca_pro;
function cerca()
{
var valorecampo = document.form1.area.options[document.form1.area.selectedIndex].value;
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
ricerca_pro = new XMLHttpRequest();
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "test.asp?id="+valorecampo,true);
ricerca_pro.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
ricerca_pro = new ActiveXObject("Microsoft.XMLHTTP");
if (ricerca_pro) {
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "test.asp?id="+valorecampo,true);
ricerca_pro.send();
}
}
}

function ricevi() {
var strRes;
var arrValori;
if (ricerca_pro.readyState == 4) {
document.getElementById("disciplina").innerHTML=ricerca_pro.responseText;
}
}
</script>



<form name="form1" method="get" >
<select name="area" class="txt" onChange="cerca()">
<option value="">Seleziona Area</option>
<%
Dim dbConn
set dbConn = server.CreateObject("adodb.connection")
dbConn.open MM_local_conn_STRING
sql = "SELECT regione FROM t_elencocomuni GROUP BY regione ORDER BY regione ASC"
set rs = dbConn.Execute(sql)

Do while not rs.eof
%>
<option value="<%=rs("regione")%>"><%=rs("regione")%></option>
<%
rs.movenext
Loop
%>
</select>
<%
pid = Request.QueryString("id")
strsql = "SELECT siglaprovincia, provincia FROM t_elencocomuni WHERE regione = '" & pid & "' GROUP BY siglaprovincia, provincia ORDER BY provincia ASC"
set rs = dbConn.Execute(strsql)
%>
<select name="disciplina" class="txt">
<option value="0">Seleziona Disciplina</option>
<%
Do while not rs.eof
%>
<option value="<%=rs("siglaprovincia")%>"><%=rs("provincia")%></option>
<%
rs.movenext
Loop
%>
</select>
</form>



Grazie 1000 a tutti...

Agostino Pasquin
60 messaggi dal 17 giugno 2003
ma il test.asp come è fatto?

io ho una configurazione di questo tipo è funziona

questo è il file cercaprovince.asp (il tuo test.asp)

Dim primo
Dim strProv
Dim connDB
Dim rsDB
Dim strSQL
Dim array_citta

Set connDB = Server.CreateObject("ADODB.Connection")
Set rsDB = Server.CreateObject("ADODB.Recordset")

connDB.Open strConnComuni
set rsDB.ActiveConnection = connDB
rsDB.CursorType = adOpenStatic
strProv = Request.QueryString("Prov")
strSQL = "SELECT * FROM comuni WHERE Prov = '" & strProv & "' ORDER BY comune desc"
rsDB.Open strSQL
primo = 0
While Not(rsDB.EOF)
'compongo l'array con i risultati
If (primo = 0) Then
primo = 1
array_citta = rsDB("comune")
Else
array_citta = rsDB("comune") & "|" & array_citta
End If
rsDB.MoveNext
WEnd
Response.Write(array_citta)
rsDB.Close
connDB.Close
Set rsDB = nothing
Set connDB = nothing


--------------------

poi nel file contente il form la funzione cerca è uguale alla tua mentre
la ricevi è così


function ricevi() {
var strRes;
var arrValori;
var strComune;
var iPos;
if (ricerca_pro.readyState == 4) {
strRes=ricerca_pro.responseText;
arrValori=strRes.split("|");
document.frmComuni.Comune.options.length=0;
for(i=0;i<arrValori.length;i++)
{
strComune=arrValori[i];
document.frmComuni.Comune.options[document.frmComuni.Comune.options.length]= new Option(strComune);
document.frmComuni.Comune.options[i].value=arrValori[i];
}
}
}


naturalmente devi sostituire frmComuni con form1 e Comune con Disciplina


inoltre penso ke la combo disciplina non dovresti caricarla inizialmente ma verrà caricata in base alla selezione della combo delle regioni.


spero ti sia d'aiuto
128 messaggi dal 01 febbraio 2006
Sicuramente mi è d'aiuto visto che sto cercando anch'io di fare delle combo collegate con Ajax per Regioni/Province/Comuni

Ho preso spunto dai tuoi suggerimenti, ma non funziona e non compare nessun errore. Hai idea di cosa possa essere?

Pagina cercaprovince.asp:

<%
Dim primo
Dim strReg
Dim connDB
Dim rsDB
Dim strSQL
Dim array_citta

Set connDB = Server.CreateObject("ADODB.Connection")
Set rsDB = Server.CreateObject("ADODB.Recordset")

connDB.Open strConnComuni
set rsDB.ActiveConnection = connDB
rsDB.CursorType = adOpenStatic
strReg = Request.QueryString("id")
strSQL = "SELECT siglaprovincia, provincia FROM t_elencocomuni WHERE regione = '" & strReg & "' GROUP BY siglaprovincia, provincia ORDER BY provincia ASC"
rsDB.Open strSQL
primo = 0
While Not(rsDB.EOF)
'compongo l'array con i risultati
If (primo = 0) Then
primo = 1
array_citta = rsDB("siglaprovincia")
Else
array_citta = rsDB("siglaprovincia") & "|" & array_citta
End If
rsDB.MoveNext
WEnd
Response.Write(array_citta)
rsDB.Close
connDB.Close
Set rsDB = nothing
Set connDB = nothing
%>



Pagina Test.asp dove sono contenute le combo nel form:

<script language="javascript">
var ricerca_pro;
function cerca()
{
var valorecampo = document.form1.regione.options[document.form1.regione.selectedIndex].value;
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
ricerca_pro = new XMLHttpRequest();
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "cercaprovince.asp?id="+valorecampo,true);
ricerca_pro.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
ricerca_pro = new ActiveXObject("Microsoft.XMLHTTP");
if (ricerca_pro) {
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "cercaprovince.asp?id="+valorecampo,true);
ricerca_pro.send();
}
}
}

function ricevi() {
var strRes;
var arrValori;
var strComune;
var iPos;
if (ricerca_pro.readyState == 4) {
strRes=ricerca_pro.responseText;
arrValori=strRes.split("|");
document.form1.prov.options.length=0;
for(i=0;i<arrValori.length;i++)
{
strComune=arrValori[i];
document.form1.prov.options[document.form1.prov.options.length]= new Option(strComune);
document.form1.prov.options[i].value=arrValori[i];
}
}
}
</script>



<form name="form1" method="get" >
<select name="regione" class="txt" onChange="cerca()">
<option value="">Seleziona una Regione</option>
<%
Dim dbConn
set dbConn = server.CreateObject("adodb.connection")
dbConn.open MM_local_conn_STRING
sql = "SELECT regione FROM t_elencocomuni GROUP BY regione ORDER BY regione ASC"
set rs = dbConn.Execute(sql)

Do while not rs.eof
%>
<option value="<%=rs("regione")%>"><%=rs("regione")%></option>
<%
rs.movenext
Loop
%>
</select>

<select name="prov" class="txt">
<option value="0">Seleziona una Provincia</option>
</select>
</form>



Grazie mille per l'aiuto...

Agostino Pasquin
60 messaggi dal 17 giugno 2003
scusa ma in cerca province.asp mancano i parametri di connessione al db


nel senso ke strConnComuni deve essere la tua stringa di connessione col database

strDBComuni = "db1.mdb"
strConnComuni = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(strDBComuni)

connDB.Open strConnComuni

io ho provato il tuo codice, con la stringa di connessione giusta e tutto funziona

cmq puoi fare una prova per vedere se il cercaprovince.asp funziona

apri da web

http://localhost/cercaprovince.asp?id=puglia

dovresti avere l'elenco delle province

LE|BR|TA|FG......
128 messaggi dal 01 febbraio 2006
Hai ragione, mi ero scordato la parte più importante.
Grazie mille, fuziona tutto correttamente.

Agostino Pasquin
60 messaggi dal 17 giugno 2003
di niente...

una cosa ke mi sono dimenticato di scriverti l'altra volta, ma penso ke ormai hai capito il funzionamento, per avere nella combo il nome delle province (o cmq qualsiasi altra informazione) basta ke nel cercaprovince.asp sostituisci


array_citta = rsDB("siglaprovincia")

con

array_citta = rsDB("nomecampo ke ti serve")
128 messaggi dal 01 febbraio 2006
OK, questo era chiaro infatti mi sono creato una copia anche per i comuni in modo da avere le tre combo a cascata Regioni-Province-Comuni.

Una piccola correzione al codice secondo me necessaria è che dopo aver scelto la regione propone nella combo successiva l'elenco delle province senza una prima riga d'intestazione (es. Scegli Provincia). Questo fa si che se l'utente appartiene ad un comune della prima provincia non tocca la combo province, ma così facendo non si popola la combo comuni.

Per superare il problema ho fatto così:

Combo regioni --> onchange:"funzione che cerca le province dalla regione"
Combo province --> onchange:"funzione che cerca i comuni dalla provincia"
Combo comuni --> on focus:"funzione che cerca i comuni dalla provincia"

Ques'ultima perchè nel caso in cui la prima provincia proposta vada bene, anche se l'utente non la modifica, cliccando sulla combo comuni questa si popola correttamente. Altrimenti l'utente è costretto a scegliere un'altra provincia e poi a scegliere di nuovo la prima per far si che si popolino i comuni.

Non so se sono stato chiaro, forse c'era una soluzione più semplice, ma non sono un mago con il codice.

Ciao e grazie ancora...

Agostino Pasquin
60 messaggi dal 17 giugno 2003
per avere nelle combo una prima riga d'intestazione


basta modificare il codice in cercaprovince.asp così

rsDB.Open strSQL

array_citta = "seleziona una provincia"
While Not(rsDB.EOF)
array_citta = array_citta & "|" & rsDB("provincia")
rsDB.MoveNext
WEnd


in questo ti comparirà l'intestazione obbligando l'utente ad una scelta

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.