【问题标题】:setTimeOut in a getJSON responsegetJSON 响应中的 setTimeOut
【发布时间】:2018-01-14 16:11:18
【问题描述】:

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

但我不确定这是否是最好的方法。 谢谢。

【问题讨论】:

    标签: javascript ajax


    【解决方案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。

    【讨论】:

      【解决方案2】:

      您可以使用 setTimeout/setInterval 来安排指定时间的方法调用。但是现在 javascript 是异步的,所以在给出间隔时要小心,并尝试使用 Promise 来更好地进行异步调用。

      【讨论】:

        【解决方案3】:

        根据执行调用所需的时间,也许最好在回调函数中设置 setTimeout,而不是设置取决于响应速度的间隔。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-03
          相关资源
          最近更新 更多