2017-09-11 55 views
0

我有一個verify.php文件,將檢查數據庫條目並返回1,如果它存在或0,如果它不。但是這個數據庫會在0到5秒之間更新。因此,至少前5秒的回報可能是0.重試Ajax請求5次與1秒間隔

在另一頁中,我想檢查verify.php的AJAX返回並重試5次,每次檢查間隔1秒。如果在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來調用自己;

使用window.setTimeout(或它的Ajax調用)等待第二

2
  • 把你的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

使用window.setInterval(function , timeInMillis)功能進行計時你的Ajax查詢。使用布爾值來檢查特定查詢何時返回。

只有當它返回時,計時器纔會生成新的查詢。

祝你最好。

<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>