2017-09-11 4 views
0

データベースエントリをチェックし、存在する場合は1を返し、存在しない場合は0を返すverify.phpファイルがあります。しかし、このデータベースは0〜5秒の間に更新されます。だから少なくとも最初の5秒間に戻り値は0になるかもしれません。1秒間隔で5回再試行Ajaxリクエスト

別のページでは、AJAXでverify.phpの復帰を確認し、各チェックの間に1秒間隔で5回再試行します。その5秒間のチェックでいつでも1を受信した場合、チェックループを終了して成功メッセージを表示します。

私はこれを書かれているが、それは一度だけチェックして、私はそれが倍のx量をチェックするようにする方法がわからない:

<p id="status"></p> 
<script type="text/javascript"> 
var url = 'verify.php'; 
$('#status').text('Please wait...'); 

$(document).ready(function(){ 
$.ajax({ 
    type: 'POST', 
    url:url, 
    success: function(msg){ 
     if (msg == 1){ 
      $('#status').text('success'); 
     }else{ 
      $('#status').text('failed'); 
     } 
    } 
}); 
}); 
</script> 

すべてのヘルプははるかに高く評価されます。ありがとう。

答えて

0

あなたのためのコードを記述せずに、ここでは「ブルートフォース」アプローチがある...

機能 であなたのAJAX呼び出しが「停止することができます」と、その関数外回と呼ばれる変数を宣言ラップ 関数が呼び出されるたびに、時間変数をインクリメントします。 ajaxレスポンスコード内に "can stop"変数を設定します。

再帰的に見える関数を作成します。 それは一度それが設定されていると、 "停止する"変数とベイルを確認します それはあなたのajax関数を呼び出します それは時と呼ばれる変数をチェックし、カウントが渡されればベイル それ自身を呼び出すためにsetTimeoutを呼び出します。二

2
    を待つ

    使用window.setTimeoutは(またはそれのためのAjaxラッパー)は、関数

  • にあなたのAJAX呼び出しを回し
  • あなたは
  • を持っているどのように多くの試行追跡する変数を持っています必要に応じて、自分のコールバックでAJAX関数を1秒の遅れで呼び出します。つまり、試行を使い果たしておらず、ステータスが間違っています。

コード

var tries = 0;  
function getStatus() { 
    $.ajax({ 
    type: 'POST', 
    url: url, 
    success: function(msg){ 
     tries++; 
     if (msg == 1){ 
     $('#status').text('success'); 
     } else { 
      if (tries >= 5) { 
      $('#status').text('failed'); 
      } else { 
      setTimeout(getStatus, 1000); 
      } 
     } 
    } 
    }); 
} 
0

あなたのAjaxのクエリを時間を計るためにwindow.setInterval(function , timeInMillis)機能を使用してください。ブール値を使用して、特定のクエリがいつ返ったかを確認します。

タイマが新しいクエリを作成する場合は、返されたときのみです。

あなたに最高の願い。

<script type="text/javascript"> 
     var queryOn = false; 
     var interval; 
$(function(){ 

    var attempts = 0; 
    interval = window.setInterval(
        function() { 
         if (queryOn === false) { 
          queryOn = true; 


          var url = "...url"; 

          $.ajax({ 
           type: 'POST', 
           url: url, 
           success: function (msg) { 

            queryOn = false; 
            if (msg === 1) { 
             $('#status').text('success'); 
             window.clearInterval(interval); 
            } else { 
             $('#status').text('failed'); 
            } 


            if(attempts === 5){ 
             window.clearInterval(interval); 
            } 
            ++attempts; 
           } 
          }); 
         } 
        }, 5000); 

}); 





     </script> 
関連する問題