を受信したときの$ .eachの次の反復質問はasked beforeでしたが、それはほぼ4年前ですが、おそらくもっと良い解決策があります。AJAX-
私は$ .each-loopを持っています。時には、の追加データがajax経由で取得されています。
フェッチされたデータをオブジェクトに書き込んでいますが、ループの後にオブジェクトからHTMLを生成する関数があります。 問題は、ajaxデータが到着する前にループが終了することです。 HTML生成機能にアラートを置くと、コンテンツが正しく読み込まれています。
ループとすべてのajax呼び出しが終了したときにのみ、HTMLジェネレータ関数を呼び出すソリューションを探しています。おそらく、開始されたAjaxリクエストを数え、それらのすべてが終了したのを待つソリューションかもしれません。
私はjQuery deferredが私にとって適切なソリューションだと信じていますが、すべてがループ内にとどまっている例だけが見つかります。助けてもらえますか?
私が最も重要なことに私のコードをストリップダウンしている:
//goes through each testplace -->main loop
$.each(jsobject, function(key, value)
{
//build object together...
for (var i = 0, numComputer = jenkinsComputer.contents.computer.length; i < numComputer; i++)
{
//If the testplace is in both objects then fire AJAX request
if (jenkinsComputer.contents.computer[i].displayName == key) //<<<This can happen only once per $.each loop, but it does not happen every time
{
//next $.each-iteration should only happen when received the JSON
var testplaceurl = jenkinsComputer.contents.computer[i].executors[0].currentExecutable.url;
$.when($.getJSON("php/ba-simple-proxy.php?url=" + encodeURI(testplaceurl) + "api/json?depth=1&pretty=1")).done(function(jenkinsUser)
{
//build object together...
});
}
}
}); //End of main Loop ($.each)
generateHTML(builtObject);
誰かが私にそれを行うにはどのようなアドバイスを与えることができればそれは素晴らしいことです。
ほんの少しのヒント:AJAXをループにすることは良いアイデアになることはありません。よりシンプルに見えるかもしれませんが、サーバーサイドにループをさせるほうが良いでしょう。 –
スクリプト全体が私たちのローカルネットワーク上で実行されています。ほとんどの場合、わずか5〜10人の短いajax呼び出しがあり、ここではネットワークに問題はありません。それはそれのためのjavascriptのソリューションがあれば素晴らしいだろう。 – bademeister