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

そうでないとアレックスによって言及として、それは必要ありませんdocument.readyの内側にそれを書くために、このソリューションをお試しください...より良いと思われますDOM操作を行います。

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

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

この問題のみ、投稿が次の6秒で終了していない場合は、再度投稿されます。 – alex

+0

あなたは正しいです。あなたは正しいコードを投稿しました。 –

+0

受諾された答えはそれを反映していません:Pまあ、私は6秒以上かかるPOSTは一種の端的なケースだと言うことができると思います。 – alex

3

いくつかの問題...

  • "imStillAlive()"は内部eval()タイプの関数を呼び出します。それをしないでください。
  • setInterval()の中に投稿しています。あなたは、ポストがもう一度それを呼び出す前に終了したことをむしろ知っていませんか
  • あなたはDOM操作をしていないので、DOMの準備が整うのを待ってはいけません。
  • imStillAlive()は、機能にとってかなり悪い名前です。
  • これは少し目立ちますが、ユーザーがあなたのサイトでまだアクティブかどうかを判断するために使用されている場合、データベースを更新するのに少し時間がかかりますか?また、誰かがブラウザを開いたままにしておくと、リソースが不必要に噛み砕かれることはありませんか?多くのユーザーがブラウザを開いたままにしておけば、自分でDOSを実行しませんか? :P

これは

(function($) { 

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

})(jQuery); 

See it on JSFiddle.net

+0

(ドキュメント)imStillAliveはどうやって来ますか? –

+1

Chinmayee、Alexのソリューションは(文書).readyを使用していません。 (関数($){})(jQuery);自己実行の無名関数です。 –

関連する問題