我进行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?
答案 0 :(得分:1)
setTimeout
只会触发一次,因为这就是它的目的。 (也许你把它与setInterval
混淆了?)
clearTimeout(timeInterval)
没有任何意义,原因有两个:
setTimeout
的返回值传递给它,而不是间隔。setTimeout
只会触发一次。这可能更接近你的目标:
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
中的代码: )