外部サービスから JSON データをロードしたいと考えています。ただし、
{ foo: ..., bar: ..., useful: {...} }
私が本当に気にかけているのは、「役に立つ」部分です。successその部分だけをコールバックに渡す必要があります。
Deferred複数のデータ ソースから一度にロードするために使用しようとしています。このようなものです。データを取得し、結果を「マッサージ」して、上記の例の「有用な」部分だけを実際にコールバックに渡したいと思いthenます。私の理解では、 to を渡すDeferredとwhen()、データは に渡されたコールバックに直接送られるため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){ ... });