我有一个setInterval函数,该函数运行调用服务器的异步代码:
setInterval(()=> {
//run AJAX function here
}, 5000);
如果服务器在5秒钟内没有收到响应,则很有可能会再次运行set Interval,然后它将在同一个端点上发出多个请求,是否有一种方法是setInterval仅在AJAX函数返回响应?
答案 0 :(得分:1)
您想要做的就是在收到响应时使用setTimeout
这是一些伪代码
const doAjaxWithDelay = (delay)=>{
setTimeout(()=>{
$.ajax({
...
}).done(()=>{
// do your staff
doAjaxWithDelay(5000)
})
},delay)
}
doAjaxWithDelay(0);
答案 1 :(得分:0)
改为使用setTimeout
function myTimer = () => {
setTimeout(()=> {
//run AJAX function here
ajaxFunc();
}, 5000);
function ajaxFunc() {
//case success
//do something
// case failure
// do something
// finally
myTimer();
}
myTimer()
答案 2 :(得分:-1)
我会添加一个这样的计数器:
var counter1 = 1;
var counter2 = 0;
setInterval( function() {
if ( counter1 > counter2 ) {
setTimeout( function() { /*Run Ajax Here*/ }, 5000 );
counter2++;
}
else { console.log("Ajax hasn't responded yet"); }
});
如果响应成功,则counter1 ++; 将其放在AJAX代码中。