我正在尝试使AJAX函数更新约30秒。我已经完成了一个简单的版本,下面是代码。
var refInterval = window.setInterval('update()', 30000); // 30 seconds var update = function() { $.ajax({ type : 'POST', url : 'post.php', success : function(data){ $('.voters').html(data); }, }); };
这有效,但是,当该函数被首次调用时,我不希望它等待30秒,我只希望该函数调用,然后等待30秒,再次调用,等待30秒,再次调用,等等。有什么帮助吗?
考虑setTimeout改用-更可靠。 setInterval当窗口没有焦点时,计时器可以堆叠,然后在再次获得焦点时,所有计时器立即运行。使用setTimeout还会确保如果第一个请求由于某种原因阻塞,则不会导致多个AJAX请求排队。
setTimeout
setInterval
要立即开始循环,请使用包裹在函数周围的IIFE(“立即调用的函数表达式”):
(function update() { $.ajax({ ... // pass existing options }).then(function() { // on completion, restart setTimeout(update, 30000); // function refers to itself }); })(); // automatically invoke for first run
ps请勿将字符串参数用作setInterval或setTimeout-只需直接传递函数引用即可。