我制作了一个自定义小部件来显示每分钟的实时数据。
这是我的小部件代码,我在其中设置了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>
我面临的问题是工作人员功能每秒都在运行。
请您告诉我如何解决此问题
答案 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);