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

标签 javascript jquery jsonp jquery-deferred

我想从外部服务加载一些 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/

相关文章:

javascript - socket.on 断开连接不起作用

php - 如果在 Jquery 中

javascript - 为什么 jQuery 的 each 循环函数会保存对元素对象的引用

javascript - 在 iPad 上触发 jQuery mouseout 事件

javascript - 在 Angular JS 1.6 中处理 JSONP 响应

javascript - 当 http 获得分块响应时陷入无限重定向循环

javascript - 如何 "stabilize"一个div

javascript - Chrome 和 safari 无法正确呈现 div

json - 为什么 "datatype: jsonp"不起作用?

jquery - "Invalid Label"与jquery和jsonp(跨域)