Answers:
您要setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
setInterval()的第一个参数也可以是要评估的代码字符串。
您可以使用以下方法清除周期函数:
clearInterval(intervalID);
setInterval()
不管参数如何,都是对问题的正确答案。这只是一个例子,两种方法在定义上都是正确的。
请注意,setInterval()通常不是周期性执行的最佳解决方案-它实际上取决于您实际上周期性地调用的javascript。
例如。如果您使用setInterval()的时间为1000ms,并且在周期函数中进行了一次ajax调用,有时需要2秒才能返回,所以您将在第一个响应返回之前再次进行ajax调用。这通常是不希望的。
许多库都有周期性的方法来防止天真的使用setInterval的陷阱,例如Nelson给出的Prototype示例。
要使用其中包含jQuery ajax调用的函数来实现更健壮的定期执行,请考虑以下内容:
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);
另一种方法是使用setTimeout,但在变量中跟踪经过的时间,然后动态设置每次调用的超时延迟,以尽可能接近所需的时间间隔执行函数,但决不要比返回响应快。
每个人都已经有一个setTimeout / setInterval解决方案。我认为必须注意,您可以将函数传递给setInterval,而不仅仅是字符串。实际上,传递真实函数而不是传递给那些函数的“逃避”字符串可能稍微“安全”一些。
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
要么:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
还是老问题了。我还需要一个定期的任务执行器并编写TaskTimer。当您需要以不同的时间间隔运行多个任务时,这也很有用。
// 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
在浏览器和Node中均可使用。有关所有功能,请参阅文档。
您将要看看setInterval()和setTimeout()。
这是一篇不错的教程文章。
是的- 在特定时间查看setInterval
并setTimeout
执行代码。setInterval将是用于定期执行代码的那个。
观看演示并在此处回答用法
由于您希望函数定期执行,因此请使用setInterval
本机方式确实是setInterval()
/ clearInterval()
,但是如果您已经在使用Prototype库,则可以利用PeriodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
这样可以防止通话重叠。从http://www.prototypejs.org/api/periodicalExecuter:
“如果执行时间比给定的时间间隔长,它可以使您避免多次并行执行回调函数(它会维护一个内部的“运行中”标志,该标志可以屏蔽回调函数中的异常)。如果您执行此操作,则特别有用在给定的时间间隔内使用一个与用户互动(例如使用提示或确认呼叫):这将避免多个消息框等待所有操作。”