0

私は次のコードを持っています:

$(function () {
    $("#ARO").load('/DA.aspx?section=ARO #ARO', function() {
        DoSomething1();
    });
    $("#ERO").load('/DA.aspx?section=ERO #ERO', function() {
        DoSomething2();
    });
    $("#IRO").load('/DA.aspx?section=IRO #IRO', function() {
        DoSomething3();
    });
    $("#ORO").load('/DA.aspx?section=ORO #ORO', function() {
        DoSomething4();
    });
    CodeIWishToExecuteAfterAllLoads();
});

ご存知のように、jqueryのロードは非同期です!したがって、関数「CodeIWishToExecuteAfterAllLoads()」は、すべてのロードイベントが完了する前に実行されます。

すべてのロードが完了した後に「CodeIWishToExecuteAfterAllLoads()」を実行するためのイベントまたは何らかの方法が必要です

誰かがそれを達成する方法についてアイデアを持っていますか?

ありがとうございました。

4

3 に答える 3

3

あなたはこれを行うことができます:

var loaded = 0;
var expected = 4;
var record_load = function(){
    loaded++;
    if(loaded == expected)
        CodeIWishToExecuteAfterAllLoads();
}

$("#ARO").load('/DA.aspx?section=ARO #ARO', function() {
    DoSomething1();
    record_load();
});
$("#ERO").load('/DA.aspx?section=ERO #ERO', function() {
    DoSomething2();
    record_load();
});
$("#IRO").load('/DA.aspx?section=IRO #IRO', function() {
    DoSomething3();
    record_load();
});
$("#ORO").load('/DA.aspx?section=ORO #ORO', function() {
    DoSomething4();
    record_load();
});
于 2012-03-20T14:09:41.590 に答える
0
$(function () {
    $("#ARO").load('/DA.aspx?section=ARO #ARO', function() {
        DoSomething1();
         $("#ERO").load('/DA.aspx?section=ERO #ERO', function() {
            DoSomething2();
            $("#IRO").load('/DA.aspx?section=IRO #IRO', function() {
                DoSomething3();
                $("#ORO").load('/DA.aspx?section=ORO #ORO', function() {
                    DoSomething4();
                    CodeIWishToExecuteAfterAllLoads();
                });
            });
         });
    });

});

これはすべて正常に機能するはずです。そうでない場合は、setTimeout()メソッドを使用して、数ミリ秒の手動遅延を提供し、CodeIWishToExecuteAfterAllLoads();

これはあなたが探しているものです。

于 2012-03-20T14:10:02.330 に答える
0

これが私がjQueryのDeferredでしたことです。

いくつかの異なるグラフのデータを読み込む必要がありました。個々のグラフデータがすべて読み込まれたら、データを集計してそのグラフ作成したいと思いました。

Utils = {
  createCharts: function (){
    Utils.initializeCharts();
    Utils.createUserCharts();
  },

  initializeCharts: function (){
    Utils.deferred = $.Deferred().done(function (){
      Utils.createAggregateCharts();
    });

    Utils.remainingCharts = $(".user").size();
  },

  decrementRemainingCharts: function (){
    --Utils.remainingCharts;
    if (Utils.remainingCharts == 0){
      Utils.deferred.resolve();
    }
  },

  createUserCharts: function (){
    $(".user").each(function (i, user){

      // ...

      $.get(href, function (response){
        Utils.chart(chart_id, response);
        Utils.decrementRemainingCharts();
      });
    });
  },

  chart: function (){
    // ...
  },

  createAggregateCharts: function (){
    // ...
  }
};

基本的には、Deferred「解決」されたときに呼び出す関数を使用してオブジェクトを作成します。次に、外部条件に基づいて、いつ呼び出すかを決定しますDeferred.resolve。とてもエレガントです。

于 2012-03-20T14:17:39.650 に答える