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

如何修改传递给.done()的Ajax响应,使回调同时获取响应数据与ID?

解决方案:让Ajax回调同时获取响应数据和传入的ID

这问题我之前处理过,给你两个实用的方案,都能完美满足需求:

方案一:用.then()包装响应数据(推荐)

通过jQuery Promise的.then()方法,我们可以把接口返回的data和传入的id包装成一个对象(或数组),返回给后续的.done()回调:

getFullAddress(id) {
  return $.ajax({ url: 'http://whatever.com' })
    .then(function(data) {
      // 将数据和ID包装成对象返回
      return {
        responseData: data,
        requestId: id
      };
    });
}

调用时就能同时拿到两个值:

this.getFullAddress(id).done(function(result) {
  console.log('接口响应:', result.responseData);
  console.log('传入的ID:', result.requestId);
});

这种方法的好处是不破坏原有的Promise链式结构,错误处理也能正常传递,而且包装后的结构清晰,可读性强。

方案二:返回数组支持ES6解构(更简洁)

如果你的项目支持ES6语法,可以直接返回数组,调用时用解构赋值快速获取两个值:

getFullAddress(id) {
  return $.ajax({ url: 'http://whatever.com' })
    .then(data => [data, id]); // 用箭头函数简化代码
}

调用示例:

this.getFullAddress(id).done(function([data, originalId]) {
  console.log('接口响应:', data);
  console.log('传入的ID:', originalId);
});

注意事项

  • 不建议直接给接口返回的data对象添加id属性:因为有些接口返回的是不可扩展的对象,或者后续其他逻辑可能依赖原始的data结构,修改它容易引发潜在问题。
  • 两种方案都保留了jQuery Ajax原有的错误处理逻辑,如果请求失败,.fail()回调依然能正常捕获错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:55