我试图运行AJAX,让我们说每5秒一次,然后在60秒后停止整个ajax调用,这样在我们达到60秒后每隔5秒就不会有任何ajax调用。
我不确定这是否可行!
我可以像这样轻松地每5秒运行一次ajax:
setInterval(function(){
$.ajax({url: 'PHP-PAGE.php', success: function(result){
}});
}, 5000);
有没有办法在ajax中启动60秒倒计时并在我们达到60秒后停止整个ajax调用?
任何帮助都将不胜感激。
答案 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
来电
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);
}