2015-10-09 51 views
0

我做了一個自定義小部件來顯示每分鐘的實時數據。爲什麼每隔1秒就要調用一次Settimeout,因爲每隔1分鐘就要調用Settimeout

這是我的小部件的代碼中,我設定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

我不認爲向下投票是必要的。這個問題顯示了嘗試,預期和實際行爲。是的,它是重複的,但如果你知道問題是什麼,找到這個重複點會容易得多。 http://meta.stackexchange.com/a/62824/178870 –

回答

1

你應該傳遞給工人的setTimeout參考,不叫

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

非常感謝。 – Pawan

0

這條線......

setTimeout(worker(), 60000); 

立即調用worker,並將其返回值傳遞給setTimeout。你想通過函數本身,而不是調用函數的結果:

setTimeout(worker, 60000);