Newsgroup: it.comp.lang.javascript
Titolo: Ajax,php e layers

Salve a tutti, Dunque...per un progetto che sto ultimando mi sono
trovato con la necessità di dover inserire delle immagini che, al
passaggio del mouse sulle stesse, richiamassero una funzione ajax il
cui scopo era quello di effettuare una richiesta ad una specifica
pagina php inserendo quindi i dati ricevuti all'interno di un layer.Il
layer in questione ha un tempo limitato di 4 secondi dopodiche viene
chiuso.Al suo interno ha una tabella che contiene il codice prelevato
in precedenza dalla funzione ajax. Il problema è che,avendo sempre
utilizzato php adesso mi trovo in notevole difficoltà nella gestione
di questi layers. Insomma nessuno dei codici per la gestione di questi
layers funziona (e ne ho utlizzati una quindicina). Passando su più
foto si attivano altrettanti layers di cui solo l'ultimo riesce ad
essere chiuso dalla funzione setTimeout mentre gli altri continuano a
permanere attivi sullo schermo. Ciò che mi serviva era una funzione
che si occupasse di gestire l'apertura e (soprattutto) la chiusura dei
layers seguendo delle piccole regole (anche perche ajax non permette
più di due richieste contemporanee mettendo le altre in attesa):
-solo un layer alla volta può essere aperto e visualizzato.
-andando con il mouse su un'immagine diversa anche prima della completa
apertura di un precedente layer, quest'ultimo viene chiuso per dare
l'ok alla nuova richiesta
-Se l'utente porta il cursore fuori dal layer ( che attualmente faccio
aprire utilizzando le coordinate del mouse-15px al verficarsi
dell'evento onmouseover) il layer viene chiuso.
Possibile che possa essere ajax il problema per cui non riesco a
gestire gli eventi da applicare ai layers? Vi ringrazio anticipatamente
per ogni eventuale aiuto o idea vorrete darmi.

Penso che puoi risolvere richiamando la funzione che chiude un
eventuale layer (anche se nessun layer è aperto) quando il mouse è su
un'immagine!
Inoltre c'è un metodo della classe "ajax" che blocca eventuali
richieste effettuate.. prova a cercare in google perchè adesso mi
sfugge :-) Richiama anche quest'ultimo metodo quando il mouse passa
sull'immagine!

Pianoska ha scritto:

Ciao Planoska,
innanzitutto grazie per l'aiuto.
Ho provato ambedue i consigli.Per il primo niente da fare perchè
quando apro un layer e quindi lo richiudo quello non mi si riapre
più.Per quel che riguarda ajax avevi ragione.Ho scoperto che si può
(e si dovrebbe) ripulire la cache della funzione ajax in modo da
evitare che il browser possa mantenere in memoria i dati contenuti nel
layer.
Quindi insieme ai parametri delle variabili da passare a php ho
inserito anche la variabile time=".time()." in modo che il browser ad
ogni richiesta è costretto a visualizzare contenuti sempre nuovi.
In pratica ho un layer
<div id="fixedtipdiv"
style="visibility:hidden;width:'+tipwidth+';background-color:'+tipbgcolor+'"
onMouseover="clearhidetip()" onMouseout="hidetip(event)" ></div>
all'interno di questo layer ne è presente un'altro con all'interno una
tabella informativa,
Funziona tutto bene fino a quando non si passa velocemente su più
immagini prima che possa terminare la funzione setTimeout. Infatti se
qualcuno passa con il mouse su piu immagini si aprono un tot di layer e
si chiude solo l'ultimo aperto in ordine cronologico.
Avevo bisogno di qualcosa che prima di aprire un layer effettui un
piccolo controllo e se vi sono altri layer aperti o in procinto di
aprirsi li chiuda.
Ciao.