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

如何在函数two(依赖one执行)与three的AJAX请求完成后执行操作?

解决方案

这事儿用jQuery的Promise机制就能轻松搞定——因为$.ajax()本身会返回一个带Promise特性的jqXHR对象,我们可以用它来跟踪请求状态,再配合$.when()来等待多个请求全部完成。具体操作如下:

  • 先修改two()和three(),让它们返回内部AJAX请求的jqXHR对象,这样我们能拿到请求的状态引用。
  • 在one()的AJAX完成回调里,同时启动two()和three()的请求,用$.when()监听这两个请求的完成状态,当两者都成功结束后,再执行你需要的后续操作。

修改后的完整代码示例:

function one(){ 
  $.ajax({ url:'url' })
    .done(function(res){ 
      // 启动two和three的请求,获取它们的Promise实例
      const twoRequest = two();
      const threeRequest = three();
      
      // 等待两个请求都完成
      $.when(twoRequest, threeRequest)
        .done(function(twoResult, threeResult){
          // 这里写两个请求都完成后要执行的操作
          console.log("two和three的AJAX请求都完成啦!");
          console.log("two请求的返回结果:", twoResult[0]);
          console.log("three请求的返回结果:", threeResult[0]);
        })
        .fail(function(){
          // 如果任意一个请求失败,会进入这里,可按需处理错误
          console.log("有一个请求失败了");
        });
    })
} 

function two(){ 
  // 返回AJAX请求的jqXHR对象(自带Promise能力)
  return $.ajax({ url:'url' })
} 

function three(){ 
  // 返回AJAX请求的jqXHR对象(自带Promise能力)
  return $.ajax({ url:'url' })
}

补充说明

  • $.when()可以接收多个Promise对象,只有当所有对象都进入成功状态(resolved)时,才会触发done()回调;如果有任意一个请求失败(rejected),会直接进入fail()回调。
  • 在done()的回调函数里,参数顺序和传入$.when()的请求顺序一致,每个参数是一个数组,包含请求的返回数据、状态文本、jqXHR对象,所以用twoResult[0]就能直接拿到two()里AJAX的返回内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:51