Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    chiamata ajax all'onunload

    vorrei fare una chiamata ajax per salvare alcuni dati solo quando l'utente sta per abbandonare la pagina (evento onunload)

    però ho paura che, essendo l'operazione di una certa durata (e non istantanea), l'esecuzione non venga portata a termine. mi sbaglio?

  2. #2
    Bella domanda...
    L'evento Unload parte poco prima che l'applicazione "termini" no?
    Se tu invochi una chiamata ajax syncrona, tutto ciò che segue non prosegue fino la fine no?
    Quindi il problema non sussiste.. o mi sbaglio?? :master: :master:

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    cioè tu dici di usare l'ajax in modo sincrono cosi alla chiusura di pagina scatta l'interazione col server che, fino a che non è terminata, non permette la chiusura del documento!??

    se è quello che intendevi penso possa funzionare

  4. #4
    Si esatto.
    Fino a quando la chiamata ajax "non termina" non va avanti.. teoricamente può funzionare.
    E' la pratica il problema

  5. #5
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ho provato questo schifoso codice qui scritto in 3 secondi e mezzo:

    codice:
    <body onunload="return ritarda()">
    
    <script type="text/javascript">
    function ritarda(){
    	for (var i=0; i<5000000; i++) {
    		document.write = "ciao!
    ";
    	}	
    }
    </script>
    
    </body>
    </html>
    come vedi fa un for da 5 milioni di ripetizioni. In effetti il rallentamento della chiusura di pagina si percepisce. signufica che il codice sincrono (come quello del for qui presente) viene eseguito TUTTO prima di chiudere baracca!

    bella pensata BATMAN!

  6. #6

  7. #7
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    però ho fatto qualche cosa in più. ho aggiunto un box di notifica che dovrebbe apparire al lancio della funzione che scatta all'unonload (proprio prima che parta il for):

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    
    <style type="text/css">
    	#closing {
    		width: 200px;
    		padding: 10px;
    		background: yellow;
    		position: absolute;
    		top: 10px;
    		left: 10px;	
    		display: none;	  
    	}
    </style>
    
    </head>
    
    <body onunload="return ritarda()">
    
    <div id="closing">
    	saving details before closing ...
    </div>
    
    <script type="text/javascript">
    // il codice sincrono (come quello del for qui presente) deve essere eseguito
    // completamente prima di far chiudere la pagina! In effetti si nota un 
    // una elapse of time prima che la pagina si chiuda 	
    function ritarda(){
    	document.getElementById("closing").style.display = "block";
    	for (var i=0; i<5000000; i++) {
    		document.write = "ciao!
    ";
    	}	
    }
    </script>
    
    </body>
    </html>
    come vedi il box giallo non appare anche se l'effetto ritardo generato dal lunghissimo for permane! insomma pare che la funzione ritarda() sia eseguita ma che il computo di menate relative ai css venga interrotto durante questa critica fase!

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.