Newsgroup: it.comp.lang.javascript
Titolo: Problema AJAX (con prototype.js)

Salve,
vorrei fare in modo che il caricamento di una immagine di una gallery non si 
vedesse nel browser, ma venisse sostituito da una delle tante gif animate 
che girano per la rete..
Ho scritto questo codice:
var img=document.getElementById('galImg');
img.src='';
img.style.display='none';
new Ajax.Request(urlx, {
  onComplete: function() {img.src=urlx;
  img.style.display='block';}
});
urlx contiene il percorso dell'immagine da caricare...
La funzione viene attivata "onClick" sulla miniatura e galImg è l'id del tag 
img di quella grande, ma cosa succede ?
Scompare la prima immagine, si vede la gif animata che fa da sfondo al div 
contenitore di img... passano i pochi secondi del preload e a questo punto 
si vede il caricamento riga per riga (presumo per la seconda volta) della 
nuova immagine...
Aiutooooo !!!
Io vorrei che la precaricasse e comparisse solo a download finito.
Sulla carta il codice mi sembra giusto, ma evidentemente mi sfugge 
qualcosa...

 qualcosa...
Ti sfugge che tramite "ajax" carichi solo il percorso dell'immagine,
non il contenuto dell'immagine. Appena il server ti risponde, associ
il percorso all'src dell'immagine facendo cosě scattare la richiesta
per il contenuto dell'immagine stessa, e imposti subito a "block" il
display dell'oggetto, senza aspettare che il caricamento sia finito.
La conseguenza, č che la tua gif di attesa rimane visibile giusto il
tempo che serve per ottenere il nome dell'immagine dal server.
-- 
~ L'ingegnere non vive, funziona.

 display dell'oggetto, senza aspettare che il caricamento sia finito.
No no, io carico tutto... è solo che l'onComplete di prototype giustamente 
non da informazioni sullo stato positivo o negativo della richiesta. Tant'è 
che sostituendolo con "onSuccess" rimane a vita l'immagine di attesa visto 
che non si ha uno stato 2xx.
Con una istanza autonoma di xhr invece tutto fila liscio.

 No no, io carico tutto...
D'accordo, ma dove? Nel codice che hai pubblicato, l'unica cosa che
carichi è l'url dell'immagine non l'immagine; e se fai un preload a
che serve richiedere nuovamente l'url, se è già conosciuto?
Ci sono delle informazioni che hai omesso.
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

 Ci sono delle informazioni che hai omesso.
Hai interpretato male il codice, o forse l'ho spiegato male io... fatto sta 
che funziona ora.
Già che ci sono... quanto conosci 
script.aculo.us
 ?
hai idea del motivo per cui questo codice fa il fade-out ma non il fade-in 
(e fa comparire l'immagine di scatto) ?
Effect.Fade('elemento');
...attesa...
Effect.Appear('elemento');
praticamente l'immagine scompare lentamente sfumando, ma poi quando incontra 
'appear', invece di fare la dissolvenza inversa  compare immediatamente...
Grazie dell'attenzione e buona giornata 

 Grazie dell'attenzione e buona giornata
Altrettanto.
-- 
~ "Io ho fatto questo, dice la mia memoria
Io non posso aver fatto questo, dice il mio orgoglio.
Alla fine, è la memoria ad arrendersi." (Nietzsche)

 Il preload di immagini si fa tranquillamente senza di questo.
Per quello che fa lui, credo basterebbe:
oImg.style.display="none";
oImg.onload=function() {oImg.style.display=""};
oImg.src=urlx;
Eh, quante cose belle si possono fare con l'ajax...
-- 
Nando [?]
Apostolo della Prova

 Eh, quante cose belle si possono fare con l'ajax...
Sono il creatore di questo thread..
Vedo che hai capito bene cosa volevo fare... e questa strada è molto
più semplice della mia. Non sapevo che l'oggetto immagine avesse la
proprietà onload !!
Per ZERO invece... tutto quello che io avevo fatto serviva a far
caricare al browser l'immagine che poi rimane in cache e quando setto
nuovamente la sua .src il browser se la ritrova bella e caricata nella
sua cache.
La strada di Nando è sicuramente più elegante.
Grazie

> Eh, quante cose belle si possono fare con l'ajax...
Eh, perņ, mettici uno smile :) altrimenti potresti essere fraiteso :(

 La strada di Nando è sicuramente più elegante.
v. prima

 Eh, però, mettici uno smile :) altrimenti potresti essere fraiteso :(
Amo essere frainteso...


 Eh, quante cose belle si possono fare con l'ajax...
E' il problema delle "mode"...
-- 
~ Se i sintomi persistono, insultare il medico.

 non è vero :( ma come bisogna dirtelo :|
E invece si... lo fanno tutti i browser che ho provato.
Comunque possiamo chiudere quà perchè non voglio scatenare inutili
flames e la soluzione ottima è stata detta.
Grazie a tutti

 Sapendo questa cosa non sto più a scomodare HXR.
"XHR".
Le immagini hanno anche l'evento "onerror", e la proprietà complete e
readyState (la prima nei browser "standard", la seconda su IE).
Anche queste possono risultarti utili.
