Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Aumentare il tempo di esecuzione di uno script

    Salve a tutti...
    ho bisogno di utilizzare uno script che mi permetta di far passare un tot di tempo... Ho utilizzato la seguente funzione...
    codice:
    function sleep(n)
    		{
    			var now = new Date();
    			var exitTime = now.getTime() + (n*1000);
    			while (true) {
    				now = new Date();
    					if (now.getTime() > exitTime) return;
    			}
    		}
    il problema è che se io faccio eseguire questa funzione per 20 secondi, dopo un po il browser mi da un messaggio dicendo che lo script sta rallentando l'esecuzione della pagina e mi chiede se voglio fermarne l'esecuzione....
    Come posso fare per non far apparire questa finestra??

    Grazie....

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

    non stai usando un buon metodo... evita di mandare in loop che altrimenti mandi tutto in bomba
    Per eseguire funzioni dopo tot tempo devi usare setTimeout
    Cosa devi fare di preciso?

  3. #3
    Ti spiego il problema...
    Devo fare il post-back sulla stessa pagina e sul server di dominio c'è un modulo che mi fa cache... praticamente devo far aspettare 20 secondi da un post e l'altro sennò non funziona...
    Cosi faccio partire uno script ad inizio pagina che mi calcola il tempo che sta passando da quando è stata generata la pagina... Quando l'utente esegue il post faccio partire una funzione che guarda quanto tempo è passato, se sono passati meno di 20 secondi lo mette in attesa con la funzione sleep e poi permette il post-back, altrimenti fa direttamente il post...
    Ecco il codice...
    codice:
    <script language="javascript">
    	function sleep(n)
    	{
    		var now = new Date();
    		var exitTime = now.getTime() + (n*1000);
    		while (true) {
    			now = new Date();
    				if (now.getTime() > exitTime) return;
    		}
    	}
    	//---------contatore 20 secondi------
    	Sec=0;
    	timerID=setInterval('Sec=Sec+1',1000);
    	if(Sec>20)
    	{
    		clearInterval(timerID) 
    	}
    	//---------fine contatore--------
    	function ControlloTime()
    	{
    		if(Sec<20)
    		{
    			Sec2=(20-Sec);
    			sleep(Sec2);
    		}
    	}
    </script>
    
    <form method="post" id="login" name="login" onSubmit="return ControlloTime()"> 
    	<input class="form_text" type="text" size="10" name="User">
    	<input class="form_button" type="submit" size="5" name="Log" value="Entra">
    </form>
    Il problema è che dopo un tot di tempo il browser pensa che si sia bloccato lo script...Come posso fare??

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da diiego87
    Il problema è che dopo un tot di tempo il browser pensa che si sia bloccato lo script...Come posso fare??
    ti basta prendere il getTime all'onload della pagina e permettere il submit solo dopo tot secondi da quel getTime iniziale.
    Ti faccio vedere come farei io
    codice:
    <html>
    <head>
    <script language="javascript">
    var tempoIniziale=null
    function Aspetta(secondi){
      if(tempoIniziale==null || secondi*1000>new Date().getTime()-tempoIniziale){
        alert('aspetta qualche secondo')
        return false
      }else return true
    }
    </script>
    </head>
    <body onload="tempoIniziale=new Date().getTime();">
    <form onsubmit="return Aspetta(20)">
    <input type="text" name="prova" value="ciao">
    <input type="submit" name="submit" value="submit">
    </form>
    </body>
    </html>

  5. #5
    Oh... grazie 1000!!!
    E se volessi fare in modo che non venga fuori l'alert, ma mettere in attesa l'utente finchè non passa il tempo necessario per effettuare automaticamente il post??
    Hai idea di come si può fare???

    Grazie!

  6. #6
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    se non vuoi che venga fuori l'alert basta che togli la riga
    alert('aspetta qualche secondo')

  7. #7
    Ciao,
    ecco qui l'effetto che volevo fare...

    codice:
    <html>
    <head>
    	<script language="javascript">
    	var tempoIniziale=new Date().getTime();
    	function Aspetta(secondi, nomeform, nomediv){
    	if(secondi*1000>new Date().getTime()-tempoIniziale)
    	{
    		document.getElementById(nomediv).style.visibility = "visible"; 
    		time=secondi*1000-(new Date().getTime()-tempoIniziale);
    		window.setTimeout("document.forms['"+nomeform+"'].submit();", time);
    		return false;
    	}else return true;
    	}
    	</script>
    </head>
    <body>
    	<div id="divname" style="visibility: hidden; position:absolute; z-index:1; background:#cccccc; overflow: hidden; top:20%; left:45%; padding:10px; text-align:center ">
    		Elaboraione in corso!! 
    
    		...attendere...
    	</div>
    	<form id="formname" name="formaname" method="post" onSubmit="return Aspetta(20, 'formname', 'divname')">
    		<input type="text" name="prova">
    		<input type="submit" name="submitbott" value="submit">
    	</form>
    </body>
    </html>

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 © 2024 vBulletin Solutions, Inc. All rights reserved.