1

API を介して 2 つの異なる Google ブックスの本棚から書籍情報を取得し、それをカスタム HTML に入れようとしていますが、すべてが表示されているわけではありません。必要な順序で配置され、すべてが $ready 内にあります。何らかの方法でコールバックを使用する必要がありますか?

これが私のフィドルです:http://jsfiddle.net/bbrLv/

これは、順不同で起動するステップを示すコンソールのショットです: http://min.us/mQ0LNVYYT

4

2 に答える 2

4

$.getJSON()は、jQuery の に基づく関数の 1 つとして$.ajax、強力な Promise インターフェイスを実装しています。つまり、次のような方法で、実際にこれらの呼び出しを$.then()メソッドで連鎖させることができます。

$.getJSON(myquery, function(data) {
  ... 
}).then(function() {
  $.getJSON(myquery2, function(data) {
     ...
  } 
});

更新: これは更新された fiddleです。そこに簡単なハックを入れる必要があります: pubdateFixer 関数です。2 番目の getJSON ハンドラー内でフォームに入れました$(function(){})が、これは正しくありません。関数は、最初のページが読み込まれたときではなく、getJSON コンテンツが到着した直後に起動する必要があります。

于 2012-06-21T18:28:24.953 に答える
3

非同期関数を呼び出しています。

応答がサーバーから送信され、コールバックが呼び出される順序をまったく予測できません(はい、$.getJSON最後の引数としてコールバックを使用するため、まだコールバックを使用しています)。

したがって、応答処理の特定の順序を確認する必要がある場合は、jquery then関数(最初にraina77owによって参照される)を使用して呼び出しをチェーンするか、別の保護メカニズム(たとえば、各応答のブール値といくつか)を追加する必要があります。希望の順序で操作を実行できるようにするコード行。

例えば ​​:

function bigOperationNeedingBothAnswers() {
}

var answersStillNotArrived=2; 


$.getJSON(firstQuery, function (data) {
   // some things
   if (--answersStillNotArrived==0) bigOperationNeedingBothAnswers();
}
$.getJSON(otherQuery, function (data) {
   // some things
   if (--answersStillNotArrived==0) bigOperationNeedingBothAnswers();
}
于 2012-06-21T18:22:49.980 に答える