jQuery setTimeout,可变时间参数

时间:2013-08-29 21:18:24

标签: jquery

我进行ajax调用以获得毫秒值,这将是不同的 连续的电话。

我显示元素中返回的值。

然后我想获取该值并将其用作时间参数 在setTimeout中。

当我的函数再次执行时,我想重置setTimeout 返回新值的time参数。

这是我拥有的,但它只在最初的十秒后执行一次:

  var timeInterval = 10000;
 setTimeout(function() {
 $.ajax({
    type: "POST",
    url: "NowPlaying.asmx/GetMilliSeconds",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      $('#duration').html(msg.d.MilliSeconds);
      clearTimeout(timeInterval);
      timeInterval = msg.d.MilliSeconds;
    }
  });
  }, timeInterval);

是否可以根据对GetMilliSeconds的连续调用,使用不同的值重置timeInterval?

2 个答案:

答案 0 :(得分:1)

setTimeout只会触发一次,因为这就是它的目的。 (也许你把它与setInterval混淆了?)

clearTimeout(timeInterval)没有任何意义,原因有两个:

  1. 您必须将setTimeout的返回值传递给它,而不是间隔。
  2. 一旦发生超时,您无需清除超时,因为每次拨打setTimeout只会触发一次。
  3. 这可能更接近你的目标:

     var timeInterval = 10000;
     var interval = setInterval(callBack, timeInterval);
    
     function callBack() {
       $.ajax({
        type: "POST",
        url: "NowPlaying.asmx/GetMilliSeconds",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
          $('#duration').html(msg.d.MilliSeconds);
          timeInterval = msg.d.MilliSeconds;
    
          // Update interval with the new value of timeInterval:
          clearInterval(interval);
          interval = setInterval(callBack, timeInterval);
        }
       });
      }
    

答案 1 :(得分:0)

你应该在一个函数中拥有所有这些,在你的成功块中递归调用它。像这样:

function() NowPlaying (timeInterval) {
    //Your code...

    success: function(msg) {
        $('#duration').html(msg.d.MilliSeconds);
        clearTimeout(IntervalHandler);
        NowPlaying(msg.d.MilliSeconds);
    }
}

您当然需要一个基本案例来了解何时退出递归循环。

此外,您使用clearTimeout的方式存在问题。您可以在时间间隔(代码中为10000)上调用它,但这不是setTimeout的处理程序。因为您使用的是setTimeout,所以您不需要清除处理程序,因为它到clearTimeout的唯一方法是它是否已经访问setTimeout中的代码: )

相关问题