在成功回调之前修改JSONP结果

时间:2012-11-30 16:43:21

标签: javascript jquery jsonp jquery-deferred

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

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

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

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

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

澄清一下,这不起作用:

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

1 个答案:

答案 0 :(得分:2)

您可以致电.pipe()来处理数据并创建新的Deferred:

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