0

以下に、ロードする必要がある要素を探して div#canvas (HTML5 のキャンバスとは関係ありません) を通過する each-loop があります。基本的に、要素に target 属性があり (1 行目)、指しているターゲット (target$) が div#canvas にない場合 (6 行目)、Ajax $.post リクエストが起動され (7 行目)、欠落しているターゲットが取り込まれます。サーバーから取得し、div#canvas の先頭に追加します。

$("#canvas .active[target]").each(function() { 
    this$ = $(this);
    targetName = this$.attr('target'); 
    target$ = $('div[name=' + targetName + ']');

    if (target$.length == 0) {
        $.post('loadData.php', { fileName : targetName + '.xml' },function(xml) {  
            canvasData$ = $(xml).find("canvasData");  
            $('#canvas').prepend(canvasData$);      
        });
    }
});   

これらの欠落しているターゲットがすべてロードされたら、Ajax リクエストを発行してすべてをdiv#canvasサーバーに送信したいと考えています。その呼び出しは次のようになります。

Status$.load('writePage.php', { 
    pageName: pageName, 
    seg1: seg1, 
    canvas: canvasOuterHTML,
    seg2: seg2
});

writePage不足しているすべてのターゲット読み取りが完了するまで、最後の呼び出しを延期する最善の方法を誰かが提案できますか?

ありがとう。

4

2 に答える 2

1

$.when を使用

var array = [];
$("#canvas .active[target]").each(function() { 
    this$ = $(this);
    targetName = this$.attr('target'); 
    target$ = $('div[name=' + targetName + ']');

    if (target$.length == 0) {
        var ajax = $.post('loadData.php', { fileName : targetName + '.xml' },function(xml) {  
            canvasData$ = $(xml).find("canvasData");  
            $('#canvas').prepend(canvasData$);      
        });
        array.push(ajax)
    }
});
$.when.apply($, array).done(function(){
    //do something
})
于 2013-08-17T15:43:13.177 に答える
1

返された deferred を配列にプッシュし、次を使用してそれを行うことができます$.when

var xhrs = [];

$("#canvas .active[target]").each(function() { 
    var targetName = this.getAttribute('target'),
        target     = $('div[name="' + targetName + '"]');

    if (!target.length) {
        var xhr = $.post('loadData.php', { fileName : targetName + '.xml' },function(xml) {  
            var canvasData = $(xml).find("canvasData");  
            $('#canvas').prepend(canvasData);
        });
        xhrs.push(xhr)
    }
});   

$.when.apply($, xhrs).then(function() {
    // do something when all request have completed
});
于 2013-08-17T15:43:20.177 に答える