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

jQuery中调用ajaxRequest时使用$.when和不使用的区别是什么

两种ajaxRequest调用写法的差异与适用场景

核心前提

你给出的ajaxRequest方法最终返回的是$.ajax()调用后的jqXHR对象,该对象本身就实现了jQuery的Deferred/Promise接口,自带done、fail、always等异步回调方法,无需额外包装即可直接使用。


具体差异

1. 单请求场景下无实质功能差别

当$.when()仅传入1个Deferred对象(即单个ajaxRequest的返回值)时,它返回的Promise对象和原ajaxRequest返回的jqXHR对象行为完全一致,done回调拿到的返回数据也没有任何区别。
这种场景下用$.when属于冗余写法,没有实际收益,仅多了一层可以忽略的包装性能开销。

2. 多请求并行场景下能力差异极大

$.when的核心作用是聚合多个并行异步任务,等待所有任务都完成后再统一触发回调,这是直接调用单个ajaxRequest无法实现的:

// 示例:并行请求国家、城市两个接口,都返回成功后再统一处理
$.when(
  ajaxRequest("GET", "Api/Filter/Country", null, true),
  ajaxRequest("GET", "Api/Filter/City", null, true)
).done(function (countryData, cityData) {
  // 回调参数按请求传入顺序对应每个接口的返回结果
  const countryList = countryData[0];
  const cityList = cityData[0];
  // 后续业务逻辑
})

如果不使用$.when,单独给每个请求绑定done回调,无法保证两个请求都返回后再执行逻辑。

3. 异常触发规则的差异

  • 单请求场景下,两种写法的异常回调触发逻辑完全一致,请求失败就会触发fail回调。
  • 多请求场景下,$.when的异常回调只要有任意一个请求失败就会立即触发,不会等待其余未完成的请求返回结果。

适用场景总结

  • 仅处理单个异步请求时,直接使用ajaxRequest(...).done(...)的写法即可,简洁高效,不需要额外套$.when。
  • 需要同时发起2个及以上并行异步请求,且必须等待所有请求都成功返回后再执行后续逻辑时,使用$.when包裹所有请求的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:05