Newsgroup: it.lavoro.professioni.webmaster
Titolo: Ajax - passaggio di variabili post da select create in modo dinamico.

Salve,
non so se sono OT, il problema riguarda tecnologie differenti (axaj, 
jscript, php) e problematiche diverse (DOM dei vari browsers) per cui spero 
di trovare aiuto anche qui... :-)
Per la gestione di sezioni dinamiche di alcune pagine che devono essere 
ricaricate dal server prima o anche senza che la pagina intera sia 
ricaricata, sto utilizzando Ajax, nel mio caso con js+php+mysql.
Tutto regolare, divertente e vantaggioso, specie per le liste e tabelle di 
inserimento / modifica itemes... ovviamente senza esagerare nell'utilizzo.
Tuttavia ho avuto un problemino con la gestione di una select dinamica che, 
a partire da una lista di province, va a caricare la sottolista di comuni 
appartenenti alla provincia selezionata.
Sostanzialmente, all'evento onChange della select delle province vi e' una 
chiamata alla mia procedura remota "rpc.php" che mi carica il recordset dei 
comuni relativi alla provincia e mi restituisce le options.
In tutto questo ho trovato la necessità di dover gestire in modo differente 
questi "passaggi" a seconda se il browser sia o non sia Internet Explorer. 
Si tratta di una applicazione di livello gestionale. Mi basta sapere che sia 
friubile completamente da IE e Firefox. E dunque faccio le mie prove con 
questi due browser. Mi spiego.
Il problema potrete comprenderlo meglio da qui:
http://www.digitalavenues.org/ajx/
Il primo blocco è costruito in questo modo: la select delle province chiama, 
onChange, la mia "rpc.php" che mi restituisce un "ajax-buffer" contenente 
tutta la struttura "completa" della select, vale a dire da "<select>" a 
"</select>". Il mio ajax-buffer viene caricato nella cella della mia pagina 
con un certo id e quindi voilà, ecco che esce fuori la lista dei miei 
comuni. Il caricamento da remote procedure call funziona sia con IE che con 
Firefox.
Tuttavia mi sono accorto che, nell'invio delle variabili post della mia 
form, mentre con IE io ottengo effettivamente la mia variabile $_POST 
contenente il nome (o il codice) del comune, con Firefox questa variabile 
$_POST non esiste... non viene assolutamente cagata di pezza nella pagina 
action.
Bon, mi sono detto. La questione ha una sua logica: se quando carico per la 
prima volta la pagina con la form, la select dei comuni effettivamente non 
esiste, giustamente quando invio le variabili via post, Firefox mi invia 
solo quelle variabili associate ad oggetti form esistenti al momento del 
primo caricamento della pagina. Non sono un luminare del modo in cui i DOM 
vengano gestiti dai browser differenti... ma ho pensato potesse essere 
questo il problema.
Per questa ragione ho "riscritto" un po' il mio codice ed ho fatto in modo 
che, al momento della creazione della pagina con la form, venga "caricato" 
già il "guscio" della select. L'ajax-buffer restituito questa volta contiene 
solo ed esclusivamente la serie di options...
Questa soluzione potete osservarla nel secondo blocco. Ma potete anche 
osservare che, malgrado questa volta effettivamente Firefox riesca a passare 
la variabile $_POST incriminata, Explorer non ricaricarica il contenuto 
della select dei comuni una volta che gli "sputo" dentro il buffer ottenuto. 
In questo caso infatti la mia rpc mi restituisce una serie di 
"<option></option>" che vengono caricate dentro un oggetto con un certo id. 
In questo secondo caso tale oggetto e' la select. Ebbene, Firefox refresha 
dinamicamente il contenuto della select. Explorer no.
A questo punto, in maniera molto grezza, dovendo scendere a compromessi, ho 
messo un controllino sulla mia applicazione, sia sulla rpc.php che sulla 
pagina della form, in modo che possa intercettare il browser dell'utente e 
gestire le cose in modo differente.
Ma vi chiedo. Considerando che la soluzione del blocco numero 2 mi sembra 
più logica, esiste un modo per "refreshare" il contenuto della select anche 
per explorer, una volta che la mia rpc restituisce il buffer con le varie 
options?
Perdonate la prolissità del mio post, ma volevo spiegare il mio problema nel 
dettaglio.
Grazie a chi mi risponderà.
Mauro Cecamore
--
http://www.digitalavenues.org

Ciao Mauro,
mi son trovato anche io in questa situazione (dover riempire una select
in maniera dinamica con ajax).
Io però ho fatto popolare gli item della select da js.
In pratica nella paginetta .php avai una funzione che ti dovrebbe
ritornare un qualcosa... per una select credo che bbia bisogno di una
coppia di risultati per Item (Id - Valore). Invece di farti ritornare
direttamente html dalla tua funzione, fatti ritornare una variabile con
un set di risultati del genere: id-valore|id-valore|id-valore...etc
etc. Una volta che ti l'output viene intercettato da js tronchi la tua
variabile sul " | ". A questo punto ottieni un array dove ogni elemento
è composto da "id-valore". A questo punto ti cerchi come popolare una
select attraverso js (da qualche parte l'ho trovato :) ) e per ogni
elemento dell'array tronchi sul "-", crei un nuovo Item passandogli
come indice l'id e come valore il valore (id-valore).
Non sò se sono stato chiaro... e non sò neanche se sia il modo
migliore ma ha funzionato :)
Ah... ricordati di cancellare gli Item della select prima di
ripopolarla con qualche altro set di risultati!!!
Ciao ciao!