C'è un modo per chiamare una funzione periodicamente in JavaScript?C'è un modo per chiamare periodicamente una funzione in JavaScript?
risposta
Volete setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
Il primo parametro da setInterval() può anche essere una stringa di codice da valutare.
è possibile cancellare una funzione periodica con:
clearInterval(intervalID);
sì - dare un'occhiata a setInterval
and setTimeout
per l'esecuzione del codice in determinati momenti. setInterval sarebbe quello da utilizzare per eseguire periodicamente il codice.
Consulta l'demo and answer here per l'utilizzo
Hai voglia di avere uno sguardo a setInterval() e setTimeout().
Ecco uno decent tutorial article.
Dal momento che si desidera che la funzione da eseguire periodicamente , utilizzare setInterval
function test() {
alert('called!');
}
var id = setInterval('test();', 10000); //call test every 10 seconds.
function stop() { // call this to stop your interval.
clearInterval(id);
}
lol questo è stato risposto rapidamente. eh. scusa per il doppio post. –
Ognuno ha già una soluzione setInterval setTimeout /. Penso che sia importante notare che è possibile passare le funzioni a setInterval, non solo alle stringhe. In realtà è probabilmente un po 'più "sicuro" per passare funzioni reali invece di stringhe che saranno "valutate" a quelle funzioni.
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
Oppure:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
+1 Se sei uno studente della [scuola Crockford di JavaScript] (http://javascript.crockford.com/code.html), eviti la valutazione in tutte le sue forme malvagie. –
@Patrick - Non penso che il suggerimento "Non usare $ (segno di dollaro) o \ (backslash) nei nomi" vada bene con il lotto jQuery :) –
Il modo nativo è davvero setInterval()
/clearInterval()
, ma se si sta già utilizzando la libreria Prototype si può usufruire di PeriodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
questo modo si evita chiamate sovrapposte. Da http://www.prototypejs.org/api/periodicalExecuter:
"che ti protegge contro molteplici esecuzioni parallele della funzione di callback, dovrebbe richiedere più tempo rispetto al dato intervallo di esecuzione (che mantiene un interno‘in esecuzione flag’, che è schermato contro eccezioni nel callback funzione). Ciò è particolarmente utile se si utilizza uno per interagire con l'utente a intervalli specifici (ad esempio, utilizzare un prompt o una chiamata di conferma): questo eviterà che più caselle di messaggio siano in attesa di essere eseguite. "
prega di notare che setInterval() non è spesso la soluzione migliore per l'esecuzione periodica - E 'davvero dipende da quello che si sta effettivamente javascript chiamando periodicamente.
es. Se si utilizza setInterval() con un periodo di 1000 ms e nella funzione periodica si effettua una chiamata ajax che richiede occasionalmente 2 secondi per tornare, si effettuerà un'altra chiamata ajax prima che la prima risposta torni indietro. Questo di solito è indesiderabile.
Molte biblioteche hanno metodi periodiche che proteggono contro le insidie di utilizzare setInterval ingenuamente come il prototipo esempio dato da Nelson.
Per ottenere più robusta l'esecuzione periodica di una funzione che ha un ajax chiamata jQuery in esso, si consideri qualcosa di simile:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
Un altro approccio è quello di utilizzare setTimeout ma tenere traccia del tempo trascorso in una variabile e quindi impostare il ritardo di timeout su ogni chiamata dinamicamente per eseguire una funzione il più vicino possibile all'intervallo desiderato, ma mai più veloce di quanto si possa ottenere.
setTimeout (myPeriodicMethod, 1000); si chiama 2 volte. è richiesto? Penso che il timeout impostato dovrebbe essere chiamato solo nella funzione completa –
Sì, il secondo setTimeout() non è un requisito, si potrebbe semplicemente chiamare myPeriodicMethod() che eseguirà immediatamente la prima chiamata ajax ... ma se si desidera * programmalo * con un ritardo dalla prima chiamata che potresti scrivere come ho scritto. –
Vecchia domanda ma .. Avevo anche bisogno di un periodico task runner e scrivevo TaskTimer. Ciò è utile anche quando è necessario eseguire più attività su intervalli diversi.
// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)
// Add task(s) based on tick intervals.
timer.addTask({
name: 'job1', // unique name of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (set to 0 for unlimited times)
callback: function (task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
}
});
// Start the timer
timer.start();
TaskTimer
funziona sia nel browser che nel nodo. Vedi documentation per tutte le funzionalità.
- 1. C'è un modo sicuro per chiamare `call` per chiamare una funzione in JavaScript?
- 2. Chiamare una funzione JavaScript preload()?
- 3. Utilizzo di un pulsante HTML per chiamare una funzione JavaScript
- 4. Chiamare una funzione definita all'interno di un'altra funzione in Javascript
- 5. Come chiamare una funzione JavaScript da PHP?
- 6. Un modo migliore per chiamare la funzione javascript in un tag
- 7. Chiamare una funzione JavaScript da C++
- 8. Chiamare una richiamata in javascript
- 9. C'è un modo per chiamare la funzione `[<-` in` [`form?
- 10. Come chiamare una funzione javascript direttamente da un'attività in Android?
- 11. Chiamare una funzione di un file javascript esterno
- 12. Come chiamare una funzione jQuery come in javascript
- 13. Funzione per chiamare ripetutamente una funzione?
- 14. costo di chiamare una funzione o non in Javascript
- 15. Come chiamare una funzione codebehind da javascript in asp.net?
- 16. come chiamare una funzione in funzione plsql
- 17. Come chiamare una funzione javascript dal tag href in html?
- 18. Come posso chiamare una funzione figlio finestra in javascript?
- 19. javax script come chiamare una funzione in JavaScript da Java
- 20. Come chiamare la funzione javascript in ZK
- 21. Chiamare la funzione Javascript da un callback C++ in V8
- 22. come chiamare una funzione javascript nel frame superiore?
- 23. Chiamare la funzione php da JavaScript
- 24. C'è un modo per chiamare una funzione di base al di fuori della classe in C++?
- 25. Come chiamare JavaScript Funzione nell'obiettivo C
- 26. Usando `select` per chiamare una funzione
- 27. aprire una nuova finestra e chiamare la funzione javascript
- 28. iniettare una funzione JavaScript in un iframe
- 29. Chiamare una funzione javascript dopo 5 secondi dell'ultimo tasto premere
- 30. Chiamare una funzione nella dichiarazione di notazione letterale dell'oggetto javascript
Ho eseguito l'upsup e quindi ho deciso di annullare il mio upvote (ma non di downvoting) perché si sta utilizzando un argomento stringa per impostareInterval. Le funzioni dovrebbero quasi sempre essere utilizzate a favore di un argomento stringa, per efficienza, sicurezza e per le loro caratteristiche di chiusura. –
Va bene, non mi dispiace. 'setInterval()' è la risposta corretta alla domanda, indipendentemente dal parametro. È solo un esempio ed entrambi i metodi sono per definizione corretti. – zombat
Sono d'accordo con Jason S; dovrebbe davvero essere una funzione. Nel tuo esempio, l'unico problema è una perdita di prestazioni trascurabile, ma è una cattiva abitudine entrare. –