为什么每隔1秒调用一次Settimeout,因为必须每1分钟调用一次

时间:2015-10-09 11:44:36

标签: jquery

我制作了一个自定义小部件来显示每分钟的实时数据。

这是我的小部件代码,我在其中设置了settimeout函数

(function()
{
  var jQuery;
  if (window.jQuery === undefined)
  {
    var script_tag = document.createElement('script');
    script_tag.setAttribute("type", "text/javascript");
    script_tag.setAttribute("src", "https://code.jquery.com/jquery-2.1.4.js");
    if (script_tag.readyState)
    {
      script_tag.onreadystatechange = function()
      { // For old versions of IE
        if (this.readyState == 'complete' || this.readyState == 'loaded')
        {
          scriptLoadHandler();
        }
      };
    }
    else
    {
      script_tag.onload = scriptLoadHandler;
    }
    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
  }
  else
  {
    jQuery = window.jQuery;
    worker();
  }

  function scriptLoadHandler()
  {
    jQuery = window.jQuery.noConflict(true);
    worker();
  }

  function worker()
  {
    alert('worker called');
    jQuery.ajax(
    {
      type: 'GET',
      url: 'http://localhost:8080/RESTWEBAPP/rest/live',
      jsonpCallback: 'jsonCallback',
      cache: false,
      dataType: 'jsonp',
      jsonp: false,
      timeout: 7000,
      success: function(data)
      {
       jQuery('.mysite-widget').append(data.price)
      },
      error: function(x, t, m)
      {
        if (t === "timeout")
        {
          alert("got timeout , please try again");
        }
        else
        {

        }
      },
      complete: function()
      {
        setTimeout(worker(), 60000);
      }
    });
  }
})();

这就是我在HTML页面中嵌入上述小部件的方法

<!DOCTYPE html>
<html>
<body>
<script src='http://localhost:8080/RESTWEBAPP/widget.js' type='text/javascript'></script>
<div class='mysite-widget'></div>
</body>
</html>

我面临的问题是工作人员功能每秒都在运行。

请您告诉我如何解决此问题

2 个答案:

答案 0 :(得分:1)

您应该将对worker的引用传递给setTimeout,而不是将其调用

setTimeout(worker(), 60000); // calls worker immediately
setTimeout(worker, 60000); // calls worker in 60 seconds

答案 1 :(得分:0)

这一行...

setTimeout(worker(), 60000);

立即调用worker,并将其返回值传递给setTimeout。您希望传递函数本身,而不是调用函数的结果

setTimeout(worker, 60000);