我想从外部服务加载一些 JSON 数据。然而,它提供了
{ foo: ..., bar: ..., useful: {...} }
而我真正关心的是“有用”的部分。我需要将该部分传递给 success
回调。
我正在尝试使用 Deferred
一次从多个数据源加载 - 类似于 this 。我想检索数据,“按摩”结果,并将上例中的“有用”部分实际传递给 then
回调。我的理解是,当您将 Deferred
传递给 when()
时,数据会直接进入传递给 then()
的回调,所以我需要在进程到达那里之前 Hook 。
我尝试了 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){ ... });
最佳答案
您可以调用.pipe()
来处理数据并创建新的Deferred:
$.getJSON(...).pipe(function(results) {
return ...;
})
关于javascript - 在成功回调之前修改 JSONP 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649399/