2010-11-29 82 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

相关问题