如何使ajax调用连续5秒一次



如何让ajax调用连续5秒一次

我像下面一样使用了setTimeout

setTimeout(function()
{
    someFn();
}, 200);

但是它使用更多的db连接。谁能告诉我一个有效的方法来连续调用一个函数5秒一次。

我在setTimeout或setInterval中使用的函数将用于将值更新到数据库。因此,这将增加数据库连接。并导致丢失db连接错误。所以我需要一些不会增加db连接的东西

我使用下面的代码

push_notification('<?php echo $user_details1[0]['id']; ?>');
setInterval(function() 
{
    push_notification('<?php echo $user_details1[0]['id']; ?>');
}, 10000);

function push_notification(driver_id)
{
    var dataS = "&type=1&driver_id="+driver_id;
    var SrcPath = "<?php echo URL_BASE; ?>";
    var response;
    $.ajax
    ({          
        type: "POST",
        url: SrcPath+"driver/adminpushnotification/1", 
        data: dataS, 
        cache: false, 
        dataType: 'html',
        success: function(response) 
        {   
            //some Functionality
        }
    });
}

这将每interval毫秒执行fn,并在duration毫秒后停止。

var duration = 5000,
    interval = 200,
    intervalTimer;
intervalTimer = setInterval(function() {
    fn();
}, interval);
setTimeout(function() {
    clearInterval(intervalTimer);
}, duration);

更新

但是,如果您在间隔回调内发出ajax请求,并且希望防止在前一个请求仍未完成时发出新请求(因为我现在正在解释您的问题),您可以在发出新请求之前检查前一个请求的状态。如果您使用的是jQuery,它可能看起来像这样:

var duration = 5000,
    interval = 200,
    xhrPending = false,
    intervalTimer;
intervalTimer = setInterval(function() {
    if (xhrPending) return;
    $.ajax(...).done(function() {
        xhrPending = false;
    });
    xhrPending = true;
}, interval);
setTimeout(function() {
    clearInterval(intervalTimer);
}, duration);
This will execute for every 3 seconds.
  <button onclick="setInterval(function(){alert('Hello')},3000);">Click Me</button>

一个简单的方法是每200毫秒调用它25次,导致在5秒后停止(25次调用)。

这将调用函数ajaxCall() 25次,然后在5秒后清除间隔。

var ajaxInterval = setInterval(function(){AjaxTimer()},200);
var counter = 1;
function AjaxTimer()
{
  if(counter > 25) {
    clearInterval(ajaxInterval );
  } else {
    ajaxCall();
    counter++;
  }
}

最新更新