You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:59