私はjQuery遅延オブジェクトと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のプラグインから$ .jsonp()を$ .getJSON()に置き換えて同じ手法を試してみました( http://code.google.com/p/jquery-jsonp/ )、延期は機能しません。
私はこれにいくつかの制限があり、それらを変更することはできません:
* API呼び出しはJSONPを使用する必要があります。
*私はエラーを検出することができなければなりません(どんな種類であっても)、jQuery-jsonpプラグインを使用しています。
私はjQuery Deferred Object、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プラグインで遅延を使用することができたら、それは知っていると素晴らしいだろう。
皆さん、ありがとうございました。
フラビア