2015-10-09 4 views
0

Я создал собственный виджет для отображения данных в реальном времени на каждую минуту.Почему вызов Settimeout вызывается на каждые 1 секунду, где он должен вызываться каждые 1 минута.

Это мой код виджета, в котором я установить 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); 
Смежные вопросы