Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我得到;“未定义功能”;在jQuery中使用setInterval。为什么?_Javascript_Jquery - Fatal编程技术网

Javascript 我得到;“未定义功能”;在jQuery中使用setInterval。为什么?

Javascript 我得到;“未定义功能”;在jQuery中使用setInterval。为什么?,javascript,jquery,Javascript,Jquery,我正在尝试使用jQuery更新用户字段 我的代码是 jQuery(document).ready(function(){ setInterval("imStillAlive()", 6000); function imStillAlive() { jQuery.post('/users/update_useractive', function(data){ alert("updated"); });//post } });

我正在尝试使用jQuery更新用户字段

我的代码是

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

      jQuery.post('/users/update_useractive',
     function(data){
    alert("updated");
     });//post
   }
    });
上面的代码在运行时显示错误

“imstilllive”未定义

如何解决这个问题?

这里有几个问题

  • “imStillAlive()”
    在内部调用
    eval()
    类型函数。不要那样做
  • 您正在
    setInterval()
    中发布。你难道不想在再次打电话之前知道邮件已经结束了吗
  • 您没有进行任何DOM操作,因此不要等待DOM就绪
  • imStillAlive()
    对于函数来说是一个非常糟糕的名字
  • 现在,这是一个有点有形的,但如果这是用来确定用户是否仍然活跃在您的网站上,是不是有点太频繁6秒更新您的数据库?此外,如果有人打开浏览器,这不会不必要地占用资源吗?如果很多用户都打开浏览器,这不是你自己的问题吗P
这看起来会更好

(function($) {

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

})(jQuery);

尝试这个解决方案,正如Alex提到的,不需要在document.ready中编写它,因为您没有进行任何DOM操作

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

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

唯一的问题是,如果帖子在接下来的6秒钟内还没有完成,它会再次发布。被接受的答案并没有反映:P哦,我想你可以说一篇耗时超过6秒钟的帖子是一种边缘案例。我很惊讶。。。在接受答案之前,接受者应该已经阅读了评论。Chinmayee,Alex的解决方案不使用(文档)。准备好了。(函数($){})(jQuery);是一个自动执行的匿名函数。