如何让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++;
}
}