jQuery:每隔X秒运行一次AJAX只需60秒?

时间:2016-07-11 07:37:36

标签: javascript jquery ajax

我试图运行AJAX,让我们说每5秒一次,然后在60秒后停止整个ajax调用,这样在我们达到60秒后每隔5秒就不会有任何ajax调用。

我不确定这是否可行!

我可以像这样轻松地每5秒运行一次ajax:

    setInterval(function(){ 

 $.ajax({url: 'PHP-PAGE.php', success: function(result){

    }});

     }, 5000);

有没有办法在ajax中启动60秒倒计时并在我们达到60秒后停止整个ajax调用?

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:7)

从设定的时间间隔中捕获进程ID

var intervalID = setInterval(..., 5000)

然后立即设置超时,以便在60秒内取消间隔

setTimeout(function(){clearInterval(intervalID)},60000)

答案 1 :(得分:2)

var start = new Date().getTime();
var interval = setInterval(function() { 
    if(new Date().getTime() - start > 60000) { // 60 seconds
        clearInterval(interval)
        interval =null;
        return;
    }
    $.ajax({url: 'PHP-PAGE.php', success: function(result){
        ...
    }});
}, 5000);

答案 2 :(得分:1)

通常,在setInterval函数内执行异步调用是一种不好的做法。相反,您可以在超时之后从其回调中执行相同的功能:

示例

查看此Fiddle以获取有效工作示例。

编辑(添加了响应时间计算)

// Start a counter
var i = 0;
var start = setInterval(function() { i++; }, 1000);

var ajaxCall = function() {

   // Set the start time
   var startAjaxRequest = new Date().getTime();

   // Execute ajax call
   $.ajax({url: 'PHP-PAGE.php', success: function(result){

      // Get the ajax response time in ms
      var ajaxResponseTime = new Date().getTime() - startAjaxRequest;

      if (i < 60 && ajaxResponseTime < 5000) {

         // Execute the same ajax call after 5 seconds minus ajax response time
         setTimeout(ajaxCall, 5000 - ajaxResponseTime);

      } else {

         clearInterval(start);

      }
   }});
}

答案 3 :(得分:0)

您应该添加时间计数器

var timeCounter= 0;

然后检查setInterval来电

中是否超过60秒
var interval = setInterval(function() {
    timeCounter += 5;
    if (timeCounter > 60) {
        clearInterval(interval);

    } else {
        $.ajax({url: 'PHP-PAGE.php', success: function(result){

        }});
    }
}, 5000);

答案 4 :(得分:0)

我找到了一种最简单的方法。对您有所帮助:

	$(function() {
	  var tick = 1;
	  setInterval(function() {
		if (tick <= 12) { // set how much times that you want to repeat
		  $.ajax({
			url: 'http://date.jsontest.com',
			success: function(result) {
			  $('pre').append('hi ' + tick + '</br>');
			  tick = tick + 1;
			}
		  });
		}
	  }, 5000); // interval time 
	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<pre>
</pre>

答案 5 :(得分:-1)

检查以下代码:)

for(var i = 1; i < 61; i++) {
   setTimeout(function(){
     console.log('#afucntionthatrunseverysecondinoneminute')
   },1000*i);
}