2012-04-23 8 views
1

setInterval関数内でclearInterval関数を呼び出しようとしています。これは運がない状態でajaxをフェッチしています。jQueryと.post()を使用してループを解除できないsetInterval内のclearInterval

var nre = setInterval('checkit()',5000); 
$(function() { 
    checkit = function(){ 
     $.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function(data) { 
      if (data == 1) { 
       $('#debug').html(data); 
       window.clearInterval(nre); 
      } 

     }); 
    } 
}); 

重要な点は、ループが壊れていないという点です。

ここでは、setInterval関数の非同期処理が問題となる可能性があることを読んだことがあります。それを解決する良い方法はありますか?

+0

まず、への変更: 'VARのNRE =のsetInterval(SANAjax、5000);' –

+0

_ "正データ" _何ですか? – gdoron

+0

私はそれによって "データ== 1" – PiotrC

答えて

6
同じスコープ内のすべてのものを移動し

、およびsetIntervalの文字列形式を使用しないでください:

$(function() { 
    var nre = setInterval(checkit, 5000); 
    function checkit() { 
     $.post("check.php", { login: "..." }, function(data) { 
      if (data === 1) { 
       $('#debug').html(data); 
       clearInterval(nre); 
      } 
     }); 
    } 
}); 
+0

、ありがとう、それは "=="演算子で、athough助けてくれました。 – PiotrC

+0

@PiotrC ahだから、あなたの 'data'は実際には正確に' 1'ではありませんか? – Alnitak

+0

私はそれが非常に1であることがわかります – PiotrC

2

checkitはそうdocument.readysetIntervalコールを移動document.ready外に表示されません。

変数checkitに匿名関数を割り当てる場合は、変数が割り当てられた後にsetInterval呼び出しを移動する必要があります。

$(function() { 
    var checkit = function(){ 
     $.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function(data) { 
      if (data == 1) { 
       $('#debug').html(data); 
       window.clearInterval(nre); 
      } 

     }); 
    } 
    var nre = setInterval(checkit,5000); 
}); 

それとも、あなたは関数を宣言した場合は、関数の宣言の前setIntervalを呼び出すことができます。

$(function() { 
    var nre = setInterval(checkit, 5000); 
    function checkit() { 
     $.post("check.php", { login: "..." }, function(data) { 
      if (data == 1) { 
       $('#debug').html(data); 
       clearInterval(nre); 
      } 
     }); 
    } 
}); 
関連する問題