jQuery Deferred ObjectsでjQuery-jsonpプラグインを使用しようとしていますが、今のところ運がありません。
目標は、APIを呼び出し、データを取得してそれらを詳しく説明することです。同じ呼び出しを使用して、さまざまな目的でさまざまなデータセットを取得して精緻化するため、各精緻化関数で同じAPI呼び出しを明示的に繰り返さないように、コードを次のように構成しました。
function callAPI(){
return $getJSON(url);
}
function doStuff1(){
$.when(callAPI)
.then(function(data){
//get the data and elaborate them for purpose #1
})
}
function doStuff2(){
$.when(callAPI)
.then(function(data){
//get a different set of data from same API
// and elaborate them for purpose #2
})
}
問題は、Julian Aubourgのプラグイン( http://code.google.com/p/jquery-jsonp/ )の$ .getJSON()を$ .jsonp()に置き換えて同じアプローチを試しましたが、延期が機能しないことです。
これにはいくつかの制限があり、変更できません。
*API呼び出しはJSONPを使用する必要があります。
*エラーを検出できる必要があります(種類に関係なく)。したがって、これまでに見つけた唯一のソリューションであるjQuery-jsonpプラグインを使用します。
私はjQueryDeferredObjectを研究し、jQueryフォーラム、Stackoverflow、およびWebの深さを検索し、プラグインページのすべてを読みました。私はいくつかのアプローチを試しましたが、これまでのところうまくいきませんでした(延期されたものがそこにさえなかったかのようです)。私の仮説は、遅延はjquery-jsonpプラグインでは機能しないというものです。これは、その構造(エラーをキャッチできるようにするため)と、$。jsonp自体が$ .ajaxのように遅延されていないためですが、私は決して専門家ではないので、この素晴らしいコミュニティからのアドバイスが必要です。
私が見つけた解決策の1つは、関数をパラメーターとしてcallAPI関数に渡すことです。これにより、成功すると、自分自身を繰り返すことなく、必要なものを実行できます。
したがって、私のcallAPI関数は次のように変更されます。
function callAPI(func){
$.jsonp({
"url": url,
"success": function(data) {
func();
},
"error": function(d,msg) {
//show error message
}
})
}
callAPI(doStuff1);
//or
callAPI(doStuff2);
しかし、エラー管理の必要性は開発段階の後半に出てきて、初心者である私はそれについて以前は考えていなかったので、これは大量のコードを書き直すことを意味します。したがって、誰かがjquery-jsonpプラグインで遅延を使用することに成功した場合、それを知っておくとよいでしょう。
皆さん、ありがとうございました。
フラビア