如何实现基于jQuery回调的带延迟的循环AJAX请求?
解决方案:用递归+setTimeout实现串行延迟请求
这个问题我熟!你原来的while(true)写法会直接出问题——因为AJAX是异步操作,while会同步疯狂发起无数请求,完全等不到上一次的响应返回,根本达不到你想要的效果。要实现等上一次请求收到响应后,延迟500ms再发送下一次请求的需求,用递归+setTimeout就可以完美解决,完全不需要setInterval,具体实现如下:
基础实现代码
// 封装请求逻辑为一个函数 function fetchLastBids() { $.get('/api/lastbids/' + auctionId) .then(function (res) { console.log(res); // 等当前响应处理完,延迟500ms后发起下一次请求 setTimeout(fetchLastBids, 500); }); } // 启动第一次请求 fetchLastBids();
加上错误处理(推荐)
为了避免某次请求失败后,整个循环直接断掉,建议加上错误捕获逻辑,比如请求失败后也延迟重试,或者根据需求停止:
function fetchLastBids() { $.get('/api/lastbids/' + auctionId) .then(function (res) { console.log(res); setTimeout(fetchLastBids, 500); }) .catch(function (error) { console.error('请求失败:', error); // 请求失败后也延迟500ms重试,或者换成return停止循环 setTimeout(fetchLastBids, 500); }); } fetchLastBids();
为什么这个方案可行?
- 每次请求都是在上一次请求的响应返回后才触发下一次,完全符合你“等响应回来再发下一次”的要求
setTimeout确保了两次请求之间有500ms的延迟- 递归调用的方式替代了同步循环,完美适配AJAX的异步特性
内容的提问来源于stack exchange,提问作者Masoud92m
相关产品推荐
相关产品推荐

