getJSON响应中的setTimeOut

时间:2018-01-14 16:11:18

标签: javascript ajax

我有一个函数可以使用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);

但我不确定这是否是最佳方法。 感谢。

3 个答案:

答案 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,而不是使用取决于响应速度的间隔。