0

私はこのJSループを持っています:

          for (var i = 0; i < jsArr.length; ++i) {
            $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
            .done(function(data) {
                eval(data);
            });
          }

dataいくつかのjQuery CSS操作です。ページの読み込み時に表示される「loadingImg」divクラスの下にある読み込み中の画像があります。API https://www.xboxleaders.com/checkdata.phpに対してチェックしますnames

$('#loadingImg').hide();ループと jQuery.doneプロセスが完了した後に (画像を非表示にする)最善の方法は何ですか?

ループの後に追加することも考えましたが、それcheckdataは終了を保証するものではありません。

4

4 に答える 4

3

$.when を使用して deferred を組み合わせることができ、すべてが解決されたときに解決されます。

var defs = [];
for (var i = 0; i < jsArr.length; ++i) {
  defs.unshift($.post("checkdata.php", { names: jsArr[i], platforms: "1" }));
  defs[0].done(function(data) {
    eval(data);
  });
}

$.when.apply($, defs).done(function() {
  $('#loadingImg').hide();
});
于 2013-07-20T22:32:57.570 に答える
1

カウンターを使用する:

      var counter = 0;
      for (var i = 0; i < jsArr.length; ++i) {
        $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
        .done(function(data) {
            counter++;
            eval(data);
            if(counter == jsArr.length){
                $('#loadingImg').hide();
            }
        });
      }
于 2013-07-20T22:27:44.320 に答える
0

ウォーターフォールを使ったほうがいい

この質問は役に立ちます

于 2013-07-20T22:31:42.060 に答える
0

これに対する 1 つの解決策は、jsArr と同じ数の要素を持つ 2 番目の配列を作成することです。各 .done で、2 番目の配列の対応するインデックスを true に設定します。次に、.done の各呼び出しで、2 番目の配列のすべての値が true かどうかを確認し、そうであれば非表示にします。(または、新しい値を 2 番目の配列にプッシュし、非表示が有効になるように配列の長さが同じかどうかを確認することもできます)

doneChecks = [];
for (var i = 0; i < jsArr.length; ++i) {
    $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
        .done(function(data) {
            doneChecks.push(true);
            eval(data);
            if (doneChecks.length == jsArr.length)
                $('#loadingImg').hide(); 
    });
}
于 2013-07-20T22:33:23.817 に答える