
Originariamente inviata da
KillerWorm
La logica di funzionamento del tuo script è sbagliata.
Devi considerare che
AJAX, per sua natura, funziona in modo asincrono (se non diversamente specificato).
La funzione indicata nel
success viene eseguita solo a conclusione di tutto il processo di trasferimento dei dati tra server e client.
Infatti, quando viene effettuata una chiamata AJAX viene inviata al server una richiesta alla pagina specificata, per cui viene eseguito lo script lato server (php o quello che è), e dal server viene restituita una risposta (sempre che non ci siano stati errori). Solo a quel punto viene chiamata la funzione specificata nel
success.
Tale funzione, quindi, non è (e non può essere) eseguita istantaneamente (cioè nel momento in cui effettui il mouseover) ma si deve attendere, inevitabilmente, la conclusione di tutto quel processo.
Anche se il tempo di risposta può essere relativamente breve, è comunque influenzato da vari fattori che possono ritardarlo sensibilmente o addirittura potrebbe non esserci alcuna risposta, ad esempio nel caso in cui venga a mancare la connessione oppure se il server va giù o se lo script lato server, per un qualsiasi motivo, non restituisce alcun valore.
Ora, impostando la proprietà
async come
false è possibile ottenere, per tale chiamata AJAX, un funzionamento sincrono.
Il problema però resta sempre il tempo di attesa tra chiamata e risposta, nel quale, in questo caso, qualsiasi azione sul browser viene bloccata finché non avvenga una risposta da tale chiamata.
Personalmente agirei in modo diverso, popolando ad esempio il title, o quello che è, da principio, quando la pagina stessa viene creata.
Poi il tooltip te lo gestisci come vuoi in seguito, evitando in questo caso le chiamate ajax.