2012-03-20 7 views
0

私は次のコードを持って:あなたはjqueryの負荷が非同期である知っているようjquery.loadsがすべて完了したときにjqueryイベントが発生しますか?

$(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(); 
}); 

を!関数"CodeIWishToExecuteAfterAllLoads()"は、すべてのロードイベントが完了する前に実行されます。

は、私はイベントや「CodeIWishToExecuteAfterAllLoadsを()」すべての負荷は誰もがそれをacomplishedする方法についてのアイデアを持っているがあります

を完了した後を実行を取得するためのいくつかの方法がありますか?

ありがとうございます。

+1

jQueryの遅延オブジェクトを見てください。 http://api.jquery.com/category/deferred-object/ – Mathletics

+0

http://tutsplus.com/lesson/deferreds/ – Jack

答えて

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(); 
}); 
+0

私はこのソリューションを好むでしょう - これはすてきで清潔でシンプルで初心者でも分かります私の場合は – scibuff

+0

私は "期待された" varはセッション変数でプログラム的に記入する必要があります。 ** expected = <%= Session( "Fuentes")。Count()%>; **。どうもありがとうございました! – euther

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(); 
       }); 
      }); 
     }); 
    }); 

}); 

これは、すべてのINORDERを動作するはずです。そうでない場合は、setTimeout()メソッドを使用して数ミリ秒間手動遅延を行い、実行してくださいCodeIWishToExecuteAfterAllLoads();

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

+0

これは動作しません!これらの要素が注文にロードされない場合、CodeIWishToExecuteはトリガーされません。 – Alytrem

+1

これは、私が何かを紛失していないかぎり、それらを順番にロードするはずです – tmjam

+0

私はあなたがajaxで物事を読み込むのを見たことがありません。私は何かを見逃した人です。私は彼がロードイベントを聞いていました:) – Alytrem

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にいつ呼び出すかを決定します。非常にエレガントです。

関連する問題