Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    209

    Select dinamiche con ajax e asp

    Salve a tutti

    sto cercando di modificare uno script ajax/asp che ho trovato sulla rete, ma ho qualche difficolta con ajax.

    In sostanza si tratta di tre select concatenate (in origine erano 2) Regioni, province e comuni.
    Non riesco a filtrare da provincia a comune.



    Gli script sono:
    form.asp (contiene config.asp e italia.js)
    config.asp (file di connessione)
    italia.js (richiama gli script province e comuni)
    province.asp
    comuni.asp


    FORM.ASP

    <%@LANGUAGE = VBScript%>

    <%
    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>




    <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%>

    <%
    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%>

    <%
    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()
    %>



    Credo che il problema sia nella parte ajax.

    Potete aiutarmi ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    ciao, anche io ho trovato lo stesso script e voglio modificarlo... te sei riuscito???

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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");}
    );
    Pietro

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Cioa Pietro, perfetto, è proprio quello che cercavo... se volessi far comparire in una text il mcap della citta selezionata, come posso fare???

    Grazie!

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    intendi il codice di avviamento postale del comune? :master:
    Pietro

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    sisi proprio quello, nell tabella comuni oltre al campo nome_citta ho anche il cap...

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da androita
    sisi proprio quello, nell tabella comuni oltre al campo nome_citta ho anche il cap...
    hai alcune strate

    1) dato un codice di esempio funzionante lo studi un poco ed aggiungi quello che vuoi

    2) nella procedura function comuni(id_provincia), invece di

    sql = "SELECT id_comune, nome_comune FROM comuni...
    fai

    sql = "SELECT id_comune, ('(' & cap & ') ' & nome_comune) as cap_comune FROM comuni...


    3) nell'evento comuni_onchange fai partire una richiesta ajax simile alle altre dell'esempio


    ciao
    Pietro

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    perfetto, grazie tante, proprio quello che mi serviva... ora provo a rimpicciolire la grafica e a farlo diventare un normale menu a tendina... spero di non fare cavolate....

    Grazie!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.