Ciao a tutti, vorrei proporvi un problema già esplorato altrove (XMLHttpRequest asincrone e sincrone), ma di cui non ho trovato soluzioni adatte al mio caso.
Premetto che sono un principiante pressochè assoluto e ho iniziato da poco ad esplorare parallelamente Javascript e Ajax: pertanto forse sono qui a chiedervi dei suggerimenti riguardanti un corretto approccio al problema, piuttosto che accortezze da coder esperti.
Cerco quindi di ripercorrere la logica che ho seguito.
Il mio problema è la creazione di un form contenente un certo numero di menù a tendina (i tag <select> di HTML), collegati fra loro in diverse catene.
Esempio pratico: selezione di una località, diviso quindi in un menù per la nazione, uno per la provincia, uno per il comune ed uno per la frazione.
Risulta semplice realizzare un meccanismo in Ajax secondo il quale ciascun menù viene popolato in maniera asincrona a partire dalla selezione effettuata sul menù precedente.
Esempio: avendo selezionato "Italia" dal primo menù ("nazione"), nel secondo apparirà l'elenco di tutte le province italiane, e così via a cascata per comuni e frazioni (Il comportamento server-side è fornito da uno o più moduli PHP che ricercano i dati su un db).
Il problema riguarda gli elementi iniziali delle catene, ovvero nel mio esempio il menù "nazione": l'elenco per essi va caricato dinamicamente al caricamento della pagina, al fine di essere subito selezionabile.
La soluzione più economica (qui forse sta il problema di approccio) mi è sembrata riutilizzare il meccanismo di popolazione degli altri menù tramite Ajax, richiamandolo al caricamento della pagina: nella fattispecie, usando l'evento OnLoad dentro il tag <BODY>.
Esempio: <body onLoad="caricaNazionePadre(); caricaNazioneMadre(); ">
Le due funzioni dell'esempio effettuano una chiamata asincrona del tipo "request.open("GET", url, TRUE); request.send(null);" per ciascun elemento iniziale delle catene.
Il problema si colloca in questo punto: il meccanismo non funziona, in quanto (mia supposizione) le richieste asincrone si accavallano e si sovrascrivono.
Risolvo forzando la sincronicità delle richieste ponendo "request.open("GET",url, FALSE)": il "trucco" funziona perfettamente su Internet Explorer ma non su FireFox.
Cercando sui vari forum, scopro che ciò è dovuto a questioni di sicurezza ed efficienza, e che comunque è sconsigliabile usare richieste sincrone in questi casi, anche quando fossero permesse. Tuttavia non so come uscirne.
Potete aiutarmi?
Grazie mille!
Alan

Rispondi quotando