Newsgroup: it.comp.lang.javascript
Titolo: preloader + AJAX + "altre finezze"

ciao a tutti,
scusate se saro' un po' lungo :P
prendendo come esempio questo sito:
http://download.breakbeat.co.uk/Default.aspx?search=pendulum
(cliccare su una qualsiasi delle copertine dei cd)
quello che devo fare e':
1) FORZARE il caricaramento del contenuto di una pagina web (html + ogni 
altra cosa contenuta comprese immagini) con ajax e scriverlo dentro un 
DIV con id specificato
2) scrivere degli "href" tipo <a href="pagina1.html">pagina1</a> ma fare 
in modo che, anziche' andare "veramente" alla pagina richiesta, venga 
lanciata la funzione di cui al punto (1)
3) usare un preloader tipo il sito che ho linkato sopra, che quindi 
appaia quando comincia il caricamento e finisca SOLO se il caricamento 
e' completato (a proposito, funziona anche con le immagini o serve 
scrivere una funzione preposta?)
al momento ho una funzioncina per il caricamento di pagine web:
function GetXmlHttpObject() {
   var objXMLHttp=null;
   if (window.XMLHttpRequest) {
     objXMLHttp=new XMLHttpRequest();
   } else if (window.ActiveXObject) {
     objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   return objXMLHttp;
}
function load_page(url_to_open,id,param) {
   var xmlHttp=GetXmlHttpObject();
   var url=url_to_open;
   url=url+"?sid="+Math.random()+'&'+param;
   xmlHttp.onreadystatechange = function(){
     if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
       document.getElementById(id).innerHTML=xmlHttp.responseText;
     }
   }
   xmlHttp.open("GET",url,true);
   xmlHttp.send("");
}
..che va, solo ke non carica pagine web esterne al sito in uso! :(
vorrei quindi anche fare in modo che "url_to_open" possa essere 
indifferentemente una pagina web esterna o interna al sito.
qualche idea?
grz a tutti :)
-- 
vox

dimenticavo...
se provo a caricare una pagina web esterna al sito in uso ottengo questo 
errore!
Errore: uncaught exception: Permesso negato al metodo di chiamata 
XMLHttpRequest.open
:-/
-- 
vox

 indifferentemente una pagina web esterna o interna al sito.
scordatelo ... devi caricare una pagina server-side *del tuo sito* e
*server-side* recuperare la pagina appartenente a un dominio diverso.
 
http://www.mozilla.org/projects/security/components/same-origin.html
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 scrivere una funzione preposta?)
Questo effettivamente non e` semplice, e, come hai notato, non puoi uscire 
dal tuo dominio con xhr.
Bye.

  
http://www.mozilla.org/projects/security/components/same-origin.html
ok ^_^
questa la risolvo con una chiamata php, recupero il contenuto e lo 
skiaffo in innerHTML :D
e scusa l'insistenza ma... per il resto (decisamente + importante) sai 
darmi qualche consiglio?
grz!
-- 
vox

 darmi qualche consiglio?
cosě al volo direi di no, ciň che chiedi č una intera pagina o
applicazione, non un suggerimento...
Fai un po' di test e fai domande piů specifiche.
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 Fai un po' di test e fai domande più specifiche.
si dunque,
di prove ne sto facendo assai, in linea di principio non riesco a fare 
in modo che il preloader scompaia SOLO se la pagina e' effettivamente e 
completamente caricata.
sul body ho:
<div id="preloader"><img src="images/ajax-loader.gif" /></div>
che ha un display:none di predefinito.
sull'href devo lanciare la funzione di (pre)load che deve:
1) mostrare il preloader
2) caricare la pagina richiesta
3) verificare se la pagina e' completamente caricata
4) nascondere il preloader
con la funzione che ho postato prima piu' un'altra piccola riesco a fare 
i punti 1,2,4
qualcosa tipo:
function goTo(url) {
// svuoto il div-content
   document.getElementById('content').innerHTML = '';
// mostro il div-preloader ( -- punto1 --)
   obj = document.getElementById('preloader');
   obj.style.display = 'block';
// lancio il caricamento della pagina ( -- punto2 --)
   load_page(url,'content','');
// nascondo il div-preloader ( -- punto4 --)
   setTimeout("obj.style.display = 'none'",100);
   // oppure: obj.style.display = 'none';
}
il punto e' che "nascondo il div-preloader" avviene prima che la pagina 
sia stata caricata :( e non so proprio come fare a forzare "nascondo il 
div-preloader" solo a caricamento avvenuto!
mi manca il punto3 insomma :-/
-- 
vox

 div-preloader" solo a caricamento avvenuto!
immagino basti metterlo nell'onreadystatechange ...
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 immagino basti metterlo nell'onreadystatechange ...
dici qui?
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
   // nascondi preloader
   document.getElementById(id).innerHTML=xmlHttp.responseText;
}
ho provato ieri, a volte sembra andare, altre volte il preloader 
"sfarfalla" come un pazzo anche se la pagina si carica, e non capisco il 
motivo poiche' non ci sono altri comandi tranne quelli che ho scritto 
qui sul NG :-/
-- 
vox

 dici qui?
sě
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

hola a tutti,
non sapendo se era il caso di aprire un nuovo post, per il momento lo 
continuo qui :P
sono (quasi) riuscito a fare tutto, solo che, come ogni somaro di js che 
vuole fare il passo + lungo della gamba, ho qualche cosa da ottimizzare 
e nn so come!
a questo link c'e' la serie di funzioni che uso:
http://zooloo.mine.nu/js.txt
per prima cosa chiamo, tramite href, la funzione < goTo(url) >
da li', basta seguire il "giro" di chiamate a altre funzioni per capire 
qual'e' il percorso.
il fatto e' questo che ho come l'impressione che potrei fare le stesse 
cose, meglio e con piu' "eleganza"... ma nn so come.
ed inoltre di classi (semmai fosse questo il caso) nn ci capisco una 
seppia :S
ps. inoltre a volte se aggiorno la pagina su IE6 ricevo un errore che nn 
riesco a catturare poiche' IE nn ha un debugger come ff!
-- 
vox

 riesco a catturare poiche' IE nn ha un debugger come ff!
ed il fadein con IE nn va una cispa :-/
-- 
vox