【问题标题】:how to make ajax calls continuously for 5 seconds once如何使ajax调用连续5秒一次
【发布时间】:2015-08-01 07:45:16
【问题描述】:

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

我用过setTimeout,如下所示,

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

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

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

我正在使用下面的代码

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

【问题讨论】:

  • 您的问题到底是什么?你想达到什么目标?您是否想每 200 毫秒发出一次 ajax 请求,但前提是之前没有待处理的请求?然后在 5 秒后停止发送?

标签: jquery ajax settimeout


【解决方案1】:

这将每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);

【讨论】:

  • 这个解决方案比我的更优雅。
  • Op 正在寻找一些 ajax 请求,您的代码每 200 毫秒调用一次请求,而无需等待任何先前的请求完成,这不是一件好事。这会更好地从前一个的完整回调中召回下一个请求,最终没有或延迟它
  • 我将此解释为问题的核心:“谁能告诉我一个有效的方法来连续调用一个函数 5 秒一次。”
  • @HannesJohansson 是的,但 OP 显然是在谈论发出 ajax 请求,否则您的解决方案将非常适合同步操作
  • 我根据对整个问题的最佳理解更新了答案。
【解决方案2】:
This will execute for every 3 seconds.

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

【讨论】:

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

一种 hacky 方法是每 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++;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多