Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: ajax e delay

  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    ajax e delay

    salve ragazzi,
    ho realizzato un sito utilizzando ahah...
    ora vorrei però fare in modo che ci sia un piccolo ritardo tra la richiesta di una pagina e la sua visualizzazione per poterci inserire un loading.
    per far ciò ho creato una funzione "preload" che richiamo nella funzione ahah() prima dell'invio dell'HttpRequest al server.
    ecco la funzione:
    codice:
    function preload(target){
    	setTimeout('this.creaDIV(target, "<div align='center'>[img]img/loading.gif[/img]</div>");',4000);
    }
    la funzione non fa altro che sotituire il contenuto del target con l'immagine di loading.
    (immagine che sarà poi sostituita con il codice html di ritorno dal server).
    il fatto è che quel setTimeout mi da qualche problema.
    infatti se lo tolgo la cosa funziona (seppur per un microsecondo) mentre se lo rimetto si blocca tutto....
    non funge più niente...
    qualche consiglio?

    grazie
    citrus

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao citrus,

    non capisco perché vuoi usare un timeout :master: quando fai la richiesta metti nel target la gif del loading e sei apposto

  3. #3
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da willybit
    Ciao citrus,

    non capisco perché vuoi usare un timeout :master: quando fai la richiesta metti nel target la gif del loading e sei apposto
    ciao
    si hai ragione ma le risposte arrivano talmente velocemente che l'icona del loading si vede solo per un microsecondo... ed è più un fastidio che altro perchè non si ha nemmeno il tempo di capire cosa sia... per questo vorrei introdurre un delay.. per fare in modo che il loading si veda almeno per un secondo...

    essite un modo di correggere il mio script?

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    tutti cercano di velocizzare e tu invece vuoi rallentare
    posta la funzione che fa la chiamata che la modifichiamo

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da willybit
    tutti cercano di velocizzare e tu invece vuoi rallentare
    posta la funzione che fa la chiamata che la modifichiamo

    willybit mi ruba sempre le risposte comunque, uno può rallentare quanto vuole. Per esempio, ho appena fatto un esperimento:

    chiamo ajax per generarmi le province di una regione
    var j = new ajax("?ajax_comando=provincie&codice_istat_regione =" + v.value, onload, null, onerror );

    la funzione di ritorno applica il ritardo

    function onload()
    {
    var t = this.request.responseText;
    //var tx = this.request.responseXML;
    window.setTimeout(function(){
    document.getElementById("div1").innerHTML = t;
    document.getElementById("regioni").disabled = false;

    }, 10000);
    }

    mah! io preferisco velocizzare che rallentare

    ps. gli ho dato 10 secondi di rallentamento
    Pietro

  6. #6
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da willybit
    tutti cercano di velocizzare e tu invece vuoi rallentare
    posta la funzione che fa la chiamata che la modifichiamo
    ehehheh
    la funzione è quella che ho postato prima...
    cmq ti posto anche il resto.
    in pratica richiamo la funzione request(...) che cambia il titolo del paragrafo, poi attiva il preloader, ed in seguito fa scattare la richiesta al server tramite HttpRequest.

    codice:
    function request(url, target, title){
    	this.changeTitle(title); // cambio il titolo del paragrafo
            this.preload(target); // preload...
    	this.ahah(url,target); // invio richiesta al server
    }
    
    function preload(target){
    	setTimeout('this.creaDIV(target, "<div align='center'>[img]img/loading.gif[/img]</div>");',4000);		
    }
    
    function ahah(url, target, method, parameters) {
    	preload(target);
    	req=this.createXMLHttp(); // creo l'oggetto XMLHttpRequest
    	if(req){
    		req.onreadystatechange=function(){ahahDone(target);};
    		if(method == undefined){method="GET";}
    		req.open(method, url, true);		
    		if (method == "GET" || method == "get"){			
    			req.send("");	
    		}else{
    			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    			req.setRequestHeader('Content-length', parameters.length);
    			req.setRequestHeader('Connection', 'close');
    			req.send(parameters);
    		}
    	}
    }
    come dicevo prima lo script si blocca su quel setTimeout...
    e non capisco come mai perchè mi sembra corretto...
    però se lo si toglie funziona... bha

  7. #7
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    quello che devi far partire dopo è il send. Fa il preload senza timeout e mettilo nel req.send
    codice:
    function ahah(url, target, method, parameters) {
    	preload(target);
    	req=this.createXMLHttp(); // creo l'oggetto XMLHttpRequest
    	if(req){
    		req.onreadystatechange=function(){ahahDone(target);};
    		if(method == undefined){method="GET";}
    		req.open(method, url, true);		
    		if (method == "GET" || method == "get"){			
    			setTimeout('req.send("")',4000);
    		}else{
    			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    			req.setRequestHeader('Content-length', parameters.length);
    			req.setRequestHeader('Connection', 'close');
    			req.send(parameters)
    		}
    	}
    }

  8. #8
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da pietro09
    willybit mi ruba sempre le risposte comunque, uno può rallentare quanto vuole. Per esempio, ho appena fatto un esperimento:

    chiamo ajax per generarmi le province di una regione
    var j = new ajax("?ajax_comando=provincie&codice_istat_regione =" + v.value, onload, null, onerror );

    la funzione di ritorno applica il ritardo

    function onload()
    {
    var t = this.request.responseText;
    //var tx = this.request.responseXML;
    window.setTimeout(function(){
    document.getElementById("div1").innerHTML = t;
    document.getElementById("regioni").disabled = false;

    }, 10000);
    }

    mah! io preferisco velocizzare che rallentare

    ps. gli ho dato 10 secondi di rallentamento
    ciao
    scusa ho visto solo ora il tuo post :P

    tu però fai partire il preload quando la risposta è gia arrivata al client..
    che va benissimo, ci mancherebbe, tanto cmq è una simulazione...
    però nel mio sito ci sono un paio di pagine che fanno l'upload di allegati quindi sarebbe bene che ci sia si un finto preload di un secondo.. ma poi anche uno vero..
    per questo preferirei inserirlo prima della chiamata

  9. #9
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da willybit
    quello che devi far partire dopo è il send. Fa il preload senza timeout e mettilo nel req.send
    codice:
    function ahah(url, target, method, parameters) {
    	preload(target);
    	req=this.createXMLHttp(); // creo l'oggetto XMLHttpRequest
    	if(req){
    		req.onreadystatechange=function(){ahahDone(target);};
    		if(method == undefined){method="GET";}
    		req.open(method, url, true);		
    		if (method == "GET" || method == "get"){			
    			setTimeout('req.send("")',4000);
    		}else{
    			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    			req.setRequestHeader('Content-length', parameters.length);
    			req.setRequestHeader('Connection', 'close');
    			req.send(parameters)
    		}
    	}
    }
    grandissimo ora funziona alla grande
    grazie mille!!
    citrus

  10. #10
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    un altra cosa soltanto....
    mi si blocca quando cerco di fare il send con parametri..
    codice:
    setTimeout('req.send(parameters)',1000);
    possibile?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.