get_user_record()这个函数调用在数据库中提取数据的方法。我使用了超时,因为我不希望这个方法,showUpdatedProgressBar()方法的响应,它持续检查数据库计数,并相应地给进度条赋值。为此我使用了setInterval()函数,但是我无法清除间隔。请告诉我哪里出错了。
function get_user_record(){
$.ajax({
url:"/GetData",
type: "GET",
timeout: 2000,
success:function(result){
//alert('success');
},
error: function(xhr, status, err){
//alert('Connection Error. Please try again.')
}
});
var timer = 0;
showUpdatedProgressBar(timer);
}
}
function showUpdatedProgressBar(timer){
$.ajax({
url:"/get_updated_data",
type: "GET",
success:function(result){
result = result.split(',');
var obj = {totalRecords: result[0], recordsTaken: result[1]};
var bar_value = obj.recordsTaken/obj.totalRecords * 100;
$( "#progressbar" ).progressbar({ value: bar_value });
if(obj.recordsTaken == obj.totalRecords ){
clearInterval(timer);
}
else
{
timer = setInterval(function(){ showUpdatedProgressBar(timer) },1000);
}
}
});
}
答案 0 :(得分:2)
以前我在本地定义了var timer并设置为0 现在它只是通过定义var timer来工作;全局而不是将其设置为零
答案 1 :(得分:1)
每次递归迭代都会为timer = setInterval(function(){showUpdatedProgressBar(timer)},1000);
'timer'分配一个新的interval id(它被覆盖)。因此,只有最后生成的id将在clearInterval中使用。