如何连续5秒进行ajax调用

时间:2015-08-01 07:45:17

标签: jquery ajax settimeout

如何连续5秒进行ajax调用。

我使用了setTimeout,如下所示,

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

但它使用更多数据库连接。任何人都可以告诉我一个有效的方法连续5秒钟调用一个函数。

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

我正在使用以下代码

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
        }
    });
}

3 个答案:

答案 0 :(得分:1)

这将每fn毫秒执行interval,并且在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);

答案 1 :(得分:0)

This will execute for every 3 seconds.

  <button onclick="setInterval(function(){alert('Hello')},3000);">Click Me</button>

答案 2 :(得分:0)

一种hacky方式是每隔200毫秒调用一次25次,导致5秒后停止(25次通话)。

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

var ajaxInterval = setInterval(function(){AjaxTimer()},200);
var counter = 1;

function AjaxTimer()
{
  if(counter > 25) {
    clearInterval(ajaxInterval );
  } else {
    ajaxCall();
    counter++;
  }
}