我有一个函数可以使用getJSON获取要显示的数据:
function getTopClientsMale(){
var url = "/getData/M";
$.getJSON(url, function(data){
document.getElementById("male1").innerHTML= "<h4><b>"+data[0].client["name"]+" "+data[0].client["lastName"]+"</b></h4><p'>TRAKscore: <b>"+data[0].surveyResults["score"]+"</b></p>";
});
return false;
}
和另一个功能:
function getTopClientsFemale(){
var url = "/getData/F";
$.getJSON(url, function(data){
document.getElementById("male1").innerHTML= "<h4>
<b>"+data[0].client["name"]+" "+data[0].client["lastName"]+"</b></h4>
<p'>TRAKscore: <b>"+data[0].surveyResults["score"]+"</b></p>";
});
return false;
}
getActivityFeed()函数执行相同操作,但调用最新输入的数据。
我希望能够每隔10秒调用这些函数来检查是否有更新。 在这种情况下我是否使用setInterval或setTimeOut? 他们都应该刷新相同的HTML的内容。 我怎么做 ? 我试过了:
var timeout = setTimeOut(getTopClientsMale, 1000);
但我不确定这是否是最佳方法。 感谢。
答案 0 :(得分:1)
最简单的解决方案是在获得JSON响应时和HTML工作后添加setTimeout。
function getTopClientsMale(){
var url = "/getData/M";
$.getJSON(url, function(data){
document.getElementById("male1").innerHTML= "<h4><b>"+data[0].client["name"]+" "+data[0].client["lastName"]+"</b></h4><p'>TRAKscore: <b>"+data[0].surveyResults["score"]+"</b></p>";
}).then(function() {
setTimeout(getTopClientsMale, 10000);
});
return false;
}
如果您尝试使用setInterval(getTopClientsMale,10000),那么如果API需要超过10秒才能回答怎么办?更新在上一次更新完成之前开始。
另一方面,此解决方案并非每10秒更新一次。它在上一次更新结束10秒后开始更新工作,因此在上一次启动后开始一次更新(10秒+等待响应的时间+更新HTML的时间)。
HTH。
答案 1 :(得分:0)
您可以使用setTimeout / setInterval以指定的时间安排方法调用。但是现在javascript是异步的,所以在给出间隔时要小心,并尝试使用promises来更好地进行异步调用。
答案 2 :(得分:0)
根据执行呼叫所需的时间,最好在回调函数中使用setTimeout,而不是使用取决于响应速度的间隔。