2010-11-29 113 views
3

我想通過使用jQuery更新用戶字段。我使用jQuery的setInterval得到「函數未定義」。爲什麼?

我的代碼...

jQuery(document).ready(function(){ 
    setInterval("imStillAlive()", 6000); 
    function imStillAlive() { 

     jQuery.post('/users/update_useractive', 
    function(data){ 
    alert("updated"); 
    });//post 
    } 
    }); 

RAN時顯示錯誤上面的代碼...

「imStillAlive」 沒有定義

如何解決這個問題?

回答

2

由Alex嘗試這種解決方案,如上面所提到,它沒有必要把它寫裏面的document.ready,你是不是做任何DOM操作。

setInterval(function(){ 
    imStillAlive(); 
}, 6000); 

function imStillAlive() {  
    jQuery.post('/users/update_useractive', 
    function(data){ 
     alert("updated"); 
    });//post 
} 
3

很少有什麼問題在這裏...

  • "imStillAlive()"內部調用的eval()型功能。不要這樣做。
  • 您正在發帖內setInterval()。難道你不知道這個帖子在再次調用之前已經完成了嗎?
  • 你沒有做任何DOM操作,所以不要等待DOM準備就緒。
  • imStillAlive()是一個功能非常糟糕的名字。
  • 現在這一個是有形的,但如果這是用來確定用戶是否仍然活躍在您的網站上,是不是6秒有點過於頻繁以更新您的數據庫?另外,如果有人離開他們的瀏覽器,這不會不必要地榨取資源嗎?如果許多用戶將他們的瀏覽器打開,這難道不是自己動手嗎? :P

這似乎更好...

(function($) { 

    (function update() { 
     setTimeout(function() { 
      $.post('/users/update_useractive', 
       function(data){ 
       alert("updated"); 
       update(); 
      }); 
     }, 6000); 
    })(); 

})(jQuery); 

See it on JSFiddle.net

+0

(document).ready inside imStillAlive怎麼回事? – 2010-11-29 05:33:12

+1

Chinmayee,Alex的解決方案不使用(document).ready。 (function($){})(jQuery);是一個自我執行的匿名函數。 – 2010-11-29 05:52:58

相關問題