Newsgroup: it.comp.lang.javascript
Titolo: Select multiple (AJAX) in ASP

Sto cercando di implementare un sistema di istruzioni html <SELECT> e 
<OPTION> in modo da rappresentare il classico problema delle 
regioni/province/comuni/frazioni. In altre parole vorrei (ad esempio), 
selezionando in una prima SELECT il Piemonte, popolare la seconda SELECT con 
le province del Piemonte. Selezionando nella seconda SELECT la provincia di 
Torino vorrei popolare la terza SELECT con i comuni della provincia di 
Torino, e così via. Fino ad avere visualizzato un elenco (in una tabella) 
con tutte le frazioni del Piemonte, di Torino, di Pinerolo.
Ho trovato un esempio in rete che, sia pure con difficoltà (non sono molto 
esperto), potrei forse trasformare adattandolo al caso mio, ma purtroppo non 
funziona con Firefox ma solo con Internet Explorer.
Ritengo che la parte del codice sottoriportata non preveda Firefox. Qui 
purtroppo non so assolutamente come intervenire per adattarlo.
Posso avere un aiuto in tal senso oppure avere indicaazioni di come reperire 
in rete un esempio più completo (a 3/4 livelli) in ASP. E' chiedere troppo ?
Grazie per l'attenzione.
AlpVir
function cerca()
{
    var CampoZona = 
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", 
"CercaIncrementale_AJAX.asp?reg="+CampoZona,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", 
"CercaIncrementale_AJAX.asp?reg="+CampoZona,true);
            ricerca_pro.send();
        }
    }
}

 }
cosě ad occhio non vedo problemi con firefox col codice sopra (la console
errori cosa dice? "non funziona" cosa significa?)
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

 }
Questo lo puoi condensare (come vedi, ci sono parti comuni). Quel che
cambia è solo come istanziare l'oggetto XMLHttpRequest. Qui trovi una
funzione minimale:
http://groups.google.it/group/it.comp.lang.javascript/browse_thread/thread/fffcc931cc0da7c3/aba9b5047e21f97e?lnk=gst&q=getxmlhttprequest+author%3Azer0#aba9b5047e21f97e
Il codice diventerebbe quindi:
	var ricerca_pro = getXmlHttpRequest();
	ricerca_pro.open("GET",
				"ricercaIncrementale_AJAX.asp?reg="+CampoZona, true);
	ricerca_pro.onreadystatechange = ricevi;
	ricerca_pro.send("");
Attento all'ordine: la prima istruzione deve essere la open (è strano
che ti funzioni su IE, infatti. Su che versione hai provato il codice
in questione?).
Ovviamente, va visto cosa fa la funzione ricevi. Il problema potrebbe
anche essere lì. Ma questo, lo vedrai dall'Error Console di FF.
-- 
~ Ci si aspetta di tutto, ma non si e' mai preparati a nulla.
(M.Swetchine)

 in questione?).
Versione IE6
Anche in questo caso ho provato a scrivere
   ricerca_pro.open("GET", 
"CercaIncrementale_AJAX.asp?reg="+CampoZona,true);
   ricerca_pro.onreadystatechange = ricevi;
invece di
  ricerca_pro.onreadystatechange = ricevi;
   ricerca_pro.open("GET", 
"CercaIncrementale_AJAX.asp?reg="+CampoZona,true);
senza ottenere alcun cambiamento.
Grazie anche a te. Altri suggerimenti ?
AlpVir

 errori cosa dice? "non funziona" cosa significa?)
Scusa l'imprecisione !
La console degli errori di FF non segnala nessun errore. Viceversa nella 
seconda SELECT (quella che dovrebbe essere popolata dopo la prima selezione) 
appare pari pari il codice della pagina HTML susseguente all'errore 404. 
Questo con FF 3.0
Con IE 6 tutto OK.
Grazie
AlpVir

 Grazie anche a te. Altri suggerimenti ?
Pubblicare la pagina online, così che si possa dare un'occhiata.
-- 
~ Always remember you're unique, just like everyone else.

> Pubblicare la pagina online, cosě che si possa dare un'occhiata.
Detto fatto !
http://www.lalpinistavirtuale.it/SkiAlp3/Temp/CercaIncrementale.asp
Per il resto dammi il tempo di digerire la massa di informazioni che mi ha 
cortesemente inviato. Sono un po' tardo di comprendonio.
Ciao
AlpVir 

 cortesemente inviato.
Se hai dubbi o domande, siam qui. :)
Eventualmente ti consiglio di guardarti anche gli archivi di questo NG
(che puoi trovare su google groups, ad esempio).
-- 
"Se c'č qualcosa di piů importante del mio ego su questa nave,
la voglio catturata e fucilata."

> Se hai dubbi o domande, siam qui. :)
Sono qui !
L'esempio 
(
http://www.lalpinistavirtuale.it/SkiAlp3/Temp/CercaIncrementale.asp
) � 
ormai diventato quasi tutto funzionante.
Vi sono per� 3 malfunzionamenti :
Malfunzionamento A
Se effettuo le seguenti 3 scelte :
1) Alpi Occidentali e parte delle Centrali
2) Alpes Maritimes
3) Roya
Nella terza SELECT appaiono 3 valli (Roya, V�subie e Tin�) con un altro 
carattere "strano" al posto della lettera accentata.
Ritengo che sia un problema di settaggio di font, forse legato a quel
var CampoZona = escape(document.forms["form1"].area.value);
o
var CampoZona = encodeURIComponent(document.forms["form1"].area.value);
da te citato.
Malfunzionamento B
A volte appaiono, alla fine dell'elenco delle zone elencate nella seconda 
SELECT, una serie di |  in numero variabile a seconda dei casi.
Ad esempio
1) parte delle Alpi Centrali e Alpi Orientali
2) Alpi Pennine
Ritengo che sia dovuto al fatto che la query fornisce qualche record vuoto. 
Il funzionamento generale non � pregiudicato tuttavia resta il fatto 
estetico. Come eliminare questi ||| ?
Malfunzionamento C
Lo svuotamento della tabella, da effettuarsi prima di ogni nuova 
interrogazione, in certi casi non funziona. La funzione da me scritta � 
probabilmente sbagliata.
Inoltre non riesco a separare in diverse celle i vari campi delle singole 
righe. C'� qualche diverso modo per popolare, sempre da Javascript, una 
tabella, modo che mi consenta un miglior controllo dell'estetica della 
tabella stessa (intestazione,colori, allineamento, ecc.) ?
Grazie ancora per la premura con cui mi aiuti, ma, credimi, sono un 
principiante quasi assoluto in Javascript.
AlpVir

 principiante quasi assoluto in Javascript.
Tranquillo. :)
-- 
~ "Le cose che esistono gi� non c'� bisogno di disegnarle.
Io ne disegno di nuove e mi diverto a guardarle."
(Gianni Rodari, "Il pennarello")

Ho corretto lo svuotamento della tabella e l'apparizione dei caratteri 
strani con un bel
Response.Charset = "iso-8859-1"
nella pagina ASP
Resta il problema della separazione nelle diverse celle dei vari campi delle 
singoli righe. Appare l'errore " "riga.split is not a function" e la cosa mi 
pare strana dato che poche righe sopra viene richiamata la medesima 
funzione. Ho provato anche a modificare il carattere di separazione (#) ma 
non � variato nulla.
function riempiGite() {
    var strRes;
    var arrValori;
    var riga;
   if (ricerca_gite.readyState == 4) {
       svuotaTabella("TBgita");     // non funziona correttamente
       var table = document.getElementById("TBgita");
     strRes=ricerca_gite.responseText;
    arrValori=strRes.split("|");
    for(i=0;i<arrValori.length;i++)
    {  // popolo la tabella
        riga=arrValori[i].split("|");
        var row = table.insertRow(i); //
       // row.insertCell(0).appendChild(document.createTextNode(riga));
// suggerimento di ZERO
var campi = riga.split("#");
for (var i=0;i<campi.length;i++){
row.insertCell(-1).appendChild( document.createTextNode(campo) );
}
      }
     }
  }
In ogni caso non mi convince il -1 nell'insertCell e la varibile campo non 
dichiarata ne valorizzata.
Certo � che, al mio ritmo, sto imparando qualcosa.
Grazie !
AlpVir 

 Grazie !
De nada, il NG serve a questo. :)
-- 
~ Ci sono tre modi di fare le cose.
Giuste, sbagliate e come dico io. (Robert De Niro in "Casin�")

La versione pressochè definitiva della pagina che impementa il codice 
Javascript sviluppato con l'aiuto determinante di ZERO è disponibile all'URL
http://www.lalpinistavirtuale.it/SkiAlp3/Cerca.asp?QM=2
Per il sottoscritto è un buon risultato.
Grazie ancora.
AlpVir