5

这是我的第一个问题,希望您能尽快回答。

我想要代码连续重复一个功能......我已经尝试了一些代码,但它没有奏效。

我试过这段代码:

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

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

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

4

5 回答 5

10

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

var repeater;

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

doWork();

根据 OP 的原始条件:

我想要连续重复功能的代码......

于 2012-12-15T18:10:18.107 回答
3

你可以这样做

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

作为@Christofer Eliasson 对于 Ajax 请求,您可能希望使用 timeout 而不是 interval,在回调中再次开始超时,以确保如果服务器占用的时间超过 1,您不会堆栈调用第二个回应

好读

  1. MDN:window.setTimeout
  2. MDN:window.setInterval
于 2012-12-15T18:07:28.957 回答
2

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

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

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

(function loadContent(){
    $('#more').load('exp1.php', function () {
       setTimeout(loadContent, 1000);
    });   
})();
于 2012-12-15T18:13:41.113 回答
0

只是把它扔在那里:

function doRequest() {
$.ajax({
  url: 'exp1.php',
  timeout: 1000,
  success: function(data) {
    $('#more').html(data);
    doRequest();
  }
});
}
于 2012-12-15T18:28:53.403 回答
-1

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

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

getStuff();​

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

于 2012-12-15T18:37:59.643 回答