AJAX间隔刷新?

我正在尝试将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); }, }); }; 

但是,当这个function被FIRST调用时,我不希望它等待30秒,我只想要调用该函数,然后等待30秒,再次调用,等待30秒,再次调用等等。有什么帮助吗?

考虑使用setTimeout – 它更可靠。 setInterval定时器可以在窗口没有焦点时进行堆叠,然后在再次获得焦点时立即运行。 使用setTimeout还可以确保如果由于某种原因第一个阻塞,则不会排队多个AJAX请求。

要立即启动循环,请使用围绕该函数的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不要对setIntervalsetTimeout使用字符串参数 – 只需直接传递函数引用。

只需在定义后立即调用update:

 var refInterval = window.setInterval('update()', 30000); // 30 seconds var update = function() { $.ajax({ type : 'POST', url : 'post.php', success : function(data){ $('.voters').html(data); }, }); }; update(); 

在使用间隔调用之前调用更新一次(在文档就绪):

 update(); var refInterval = window.setInterval('update()', 30000); 

在设置计时器之前调用该function。

像这样:

  var update = function() { $.ajax({ type : 'POST', url : 'post.php', success : function(data){ $('.voters').html(data); }, }); }; update(); var refInterval = window.setInterval('update()', 30000); // 30 seconds 

只需将setTimeout放入您的successhandler中它就应该像魅力一样工作

 var update = function() { $.ajax({ type : 'POST', url : 'post.php', success : function(data){ $('.voters').html(data); var refInterval = window.setTimeout('update()', 30000); // 30 seconds }, }); }; update()