2012-02-07 35 views
6

我想要實現的是最初的數據將被加載,然後每10分鐘使用相同的函數進行更新。在JavaScript中使用setInterval而不使用內聯,匿名函數

考慮以下代碼:

var updateNamespace = (function() { 
    var object = '#updates', 
    load = 'loader'; 

    return { 
     update: function() { 
      $(object).addClass(load).load('update.php', function(reponse, status, xhr) { 
       if (status == 'error') { 
        $(this).html('<li>Sorry but there was an error in loading the news &amp; updates.</li>'); 
       } 
       $(this).removeClass(load); 
      }); 
     } 
    } 
})(); 

setInterval(updateNamespace.update(), 600000); 

我得到這個錯誤:

useless setInterval call (missing quotes around argument?) 

我該如何解決這個問題?

什麼是更好更優雅的書寫方式或使用setInterval函數?

謝謝。

回答

14

您需要使用:

setInterval(updateNamespace.update, 600000); 

(注意去掉調用()運算符)

你的代碼,寫的,實際上將調用updateNamespace.update當你調用的setInterval。因此,

setInterval(updateNamespace.update(), 600000); 

評估爲

setInterval(undefined, 600000); 

你想傳遞setInterval參考你的函數,它調用的不是結果。

+0

不錯的答案!在我的情況下,我不得不將參數發送到由setInterval調用的函數。然後,我把它們放在更大的範圍內(不是全局思想)。它充當魅力! – 2012-12-10 13:50:57

-6

嘗試setInterval('updateNamespace.update()', 600000);

注意周圍的函數調用

0

引號出於某種原因的JavaScript希望看到周圍的方法,您的電話報價。就好像它是一個字符串。不知道爲什麼它像那樣工作。馬特閣下說,如果你通過一個參考,將解決問題。但如果你需要傳遞一個論點,它將不起作用。所以我不知道也許JavaScript只是將該方法保存爲一個字符串,然後在使用它時轉換回正常。