【问题标题】:Modifying JSONP results before success callback成功回调前修改 JSONP 结果
【发布时间】:2025-12-06 18:15:01
【问题描述】:

我想从外部服务加载一些 JSON 数据。但是,它提供了

{ foo: ..., bar: ..., useful: {...} }

而我真正关心的是“有用”部分。我只需要将那部分传递给success 回调。

我正在尝试使用Deferred 一次从多个数据源加载——类似于this。我想检索数据,“按摩”结果,并将上面示例中的“有用”部分实际传递给then 回调。我的理解是,当你将Deferred 传递给when() 时,数据会直接进入传递给then() 的回调,所以我需要在它到达之前挂钩该进程。

我尝试了dataFilter,但对于 JSONP,那是not possible。有没有其他方法可以拦截这些结果?我可以在我的then() 回调中添加一些检查,以处理不同于“新鲜”结果的缓存数据,但这首先失去了Deferred 的魔力。

澄清一下,这是行不通的:

$.when($.ajax({
  url: "host/service",
  dataType: "jsonp",
  dataFilter: function(data, type){
    return data.useful; // throws, data === undefined
  }
})).then(function(usefulStuff){ ... });

【问题讨论】:

  • 请贴一些你试过的代码...

标签: javascript jquery jsonp jquery-deferred


【解决方案1】:

您可以调用.pipe()处理数据并创建一个新的Deferred:

$.getJSON(...).pipe(function(results) {
    return ...;
})

【讨论】: