2

我想从外部服务加载一些 JSON 数据。然而,它提供

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

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

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

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

为了澄清,这不起作用:

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

1 回答 1

2

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

$.getJSON(...).pipe(function(results) {
    return ...;
})
于 2012-11-30T16:45:56.550 回答