以时间间隔连续重复运行JavaScript函数

时间:2012-12-15 18:05:25

标签: javascript jquery ajax

这是我的第一个问题,我很高兴你很快回答。

我想代码连续重复一个函数... 我尝试了一些代码,但它没有用。

我试过这段代码:

<script type="text/javascript">
$(function() 
{
$('#more').load('exp1.php'); // SERIOUSLY!
});
</script>

我想在一段时间后重复这个功能。我试过了 setInterval()setTimeout()

但是,我还没有收到结果。

5 个答案:

答案 0 :(得分:7)

这将重复此任务,直到您清除间隔(使用clearTimeout(repater))

var repeater;

function doWork() {
 $('#more').load('exp1.php');
 repeater = setTimeout(doWork, 1000);
}

doWork();

根据OP的原始条件:

  

我希望代码能够连续重复功能......

答案 1 :(得分:2)

你可以这样做

var myFunction = function() {
    $('#more').load('bla.php'); 
};

var timer =  setInterval(myFunction, 1000); // call every 1000 milliseconds

var timer = setTimeout(myFunction, 1000); // call every 1000 milliseconds

clearTimeout(timer); //To stop the function from being called forever

as @Christofer Eliasson 对于Ajax请求,您可能希望使用超时而不是间隔,在回调中再次启动超时,以确保您不会如果服务器响应时间超过1秒,则堆栈调用

好读

  1. MDN:window.setTimeout
  2. MDN:window.setInterval

答案 2 :(得分:2)

对于Ajax请求,我会使用timeout而不是间隔,并在ajax-request的回调中再次启动超时。

如果您使用1秒的间隔并且您的服务器需要超过一秒的时间来响应,您将开始以间隔堆叠呼叫,因为无论如何,间隔将每秒调用该函数。相反,使用超时回调方法,在上一次请求完成之前,您不会开始倒计时。

我正在使用IIFE来触发对该函数的第一次调用。然后当加载完成后,我使用超时在一秒后再次调用该函数:

(function loadContent(){
    $('#more').load('exp1.php', function () {
       setTimeout(loadContent, 1000);
    });   
})();

答案 3 :(得分:0)

把它扔出去:

function doRequest() {
$.ajax({
  url: 'exp1.php',
  timeout: 1000,
  success: function(data) {
    $('#more').html(data);
    doRequest();
  }
});
}

答案 4 :(得分:-1)

一些好的'时尚递归怎么样?

function getStuff() {
    $('#more').load('exp1.php', function() {
        getStuff();
    });
}

getStuff();​

演示:
http://jsfiddle.net/Zn2rh/1/