Ciao a tutti,
sto lavorando a una versione flash di una rivista.
Il testo di ogni pagina è diviso in quattro colonne e risiede su un db mySQL al quale mi interfaccio tramite php (la tabella contiene quattro campi che si chiamano colonna1...colonna4).
Siccome utilizzo un component che mette tutta la rivista in cache ho la necessità di caricare tutti i testi nel primo frame del mio progetto, per renderli immediatamente disponibili e applicare qualche effetto.
L'idea quindi è questa: creo quattro variabili temporanee, colonna1...colonna4 nelle quali copio i dati recuperati dal db per una data pagina, dopodiché copio queste variabili in quelle proprie della pagina (che nel caso di pagina 1 si chiameranno p1_colonna1...p1_colonna4).
la funzione che utilizzo per caricare i dati da db è questa:
Questo è invece il codice utilizzato per caricare i dati relativi a due pagine:Codice PHP:function loadData(url_par){
loader = new LoadVars();
loader.load(url_par);
loader.onLoad = function(success) {
if(success){
_root.colonna1 = eval("this.colonna1");
_root.colonna2 = eval("this.colonna2");
_root.colonna3 = eval("this.colonna3");
_root.colonna4 = eval("this.colonna4");
}
}
}
E qua cominciano i primi problemi: quando flash chiama per la prima volta la funzione loadData non ne aspetta la terminazione ma procede oltre (ho verificato con il trace), richiama la stessa funzione per pagina 5 e mi trovo con due esecuzioni sovrapposte. Dato che queste funzioni agiscono sulle stesse variabili "globali", capite bene che la cosa non è propriamente desiderabile.Codice PHP:pagina=4; // numero della pagina
url="http://www.x.com/y.php?pag="+pagina;
loadData(url); // accedo al db
/* copio i dati nelle variabili relative alla pagina */
_root.p4_colonna1=_root.colonna1;
_root.p4_colonna2=_root.colonna2;
_root.p4_colonna3=_root.colonna3;
_root.p4_colonna4=_root.colonna4;
pagina=5; // numero della pagina
url="http://www.x.com/y.php?pag="+pagina;
loadData(url); // accedo al db
/* copio i dati nelle variabili relative alla pagina */
_root.p5_colonna1=_root.colonna1;
_root.p5_colonna2=_root.colonna2;
_root.p5_colonna3=_root.colonna3;
_root.p5_colonna4=_root.colonna4;
Ho provato allora a usare un "semaforo", una variabile "fine" che viene settata a 1 all'ultima istruzione della funzione loadData e che utilizzo per segnalare la fine del caricamento dei dati:
ma non sembra funzionareCodice PHP:function loadData(url){
...
_root.fine=1;
}
// pagina 1
loadData(url_pagina1);
while(_root.fine!=1){
}
// copio i dati nelle variabili della pagina
_root.fine=0; // resetto il semaforo
// pagina 2
loadData(url_pagina2);
![]()
Ora vi chiedo: esiste qualche altro metodo per bloccare il flusso dell'esecuzione finchè una data funzione non termina il suo lavoro ed evitare queste sovrapposizioni?
Grazie a tutti![]()



Rispondi quotando
