2

外部サービスから JSON データをロードしたいと考えています。ただし、

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

私が本当に気にかけているのは、「役に立つ」部分です。successその部分だけをコールバックに渡す必要があります。

Deferred複数のデータ ソースから一度にロードするために使用しようとしています。このようなものです。データを取得し、結果を「マッサージ」して、上記の例の「有用な」部分だけを実際にコールバックに渡したいと思いthenます。私の理解では、 to を渡すDeferredwhen()、データは に渡されたコールバックに直接送られるため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 に答える