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

jQuery each循环中如何等待Ajax请求完成后再继续下一轮循环

jQuery 串行发送Ajax请求无阻塞解决方案

你可以通过以下两种方案实现按顺序发送异步请求,全程不会阻塞页面交互:

方案1:递归串行执行(兼容所有支持jQuery的浏览器)

核心逻辑是将选中的复选框转为数组,每完成一个请求再递归调用处理下一个元素:

// 先将选中的复选框转为普通数组
const checkedOptions = $('input[name="options[]"]:checked').toArray();

// 递归请求函数
function sendRequest(index) {
  // 所有请求处理完毕直接结束
  if (index >= checkedOptions.length) return;

  const name = $(checkedOptions[index]).val();
  jQuery.ajax({
    url: "www.example.com",
    type: "POST",
    data: {
      name: name
    },
    success: function(data) {
      // 原有业务处理逻辑
      // do something
      // 上一个请求成功后触发下一个请求
      sendRequest(index + 1);
    },
    error: function(err) {
      // 错误逻辑可自定义:如果需要出错仍继续后续请求,可在此处调用sendRequest(index + 1)
    }
  });
}

// 启动第一个请求
sendRequest(0);

方案2:async/await 实现(适配现代浏览器,代码更简洁)

jQuery.ajax 本身返回类Promise对象,可直接结合async/await实现串行等待:

async function batchSendRequest() {
  const checkedOptions = $('input[name="options[]"]:checked');
  // 用for循环替代each,可实现await等待逻辑
  for (let item of checkedOptions) {
    const name = $(item).val();
    try {
      // 等待当前请求完成后再进入下一轮循环
      const data = await jQuery.ajax({
        url: "www.example.com",
        type: "POST",
        data: {
          name: name
        }
      });
      // 原有success业务处理逻辑
      // do something
    } catch (err) {
      // 错误处理逻辑
    }
  }
}

// 调用执行批量请求
batchSendRequest();

两种方案均为纯异步执行,不会阻塞JS主线程,页面渲染、用户交互全程不受影响。可根据项目的浏览器兼容要求选择对应方案。

内容的提问来源于stack exchange,提问作者kingdom yo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:18:00