2013-08-17 2 views
0

로드해야하는 요소를 찾는 div # canvas (HTML5의 캔버스와 관련 없음)를 통과하는 아래의 each-loop가 있습니다. 기본적으로 요소에 대상 속성 (1 행)이 있고 목표 (target $)가 div # canvas (6 행)에없는 경우 Ajax $ .post 요청이 시작되어 (7 행) 누락 된 대상을 서버에서 div # canvas 앞에 추가하십시오. 이없는 모든 대상이로드 된 여러 Ajax 호출을 기다리는 중

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

나는 서버에 div#canvas을 모두 보낼 Ajax 요청을 발행합니다.

이 이

사람이 누락 된 대상의 모든 때까지 writePage에 대한 최종 호출을 유지하는 최선의 방법을 제시 할 수는

Status$.load('writePage.php', { 
    pageName: pageName, 
    seg1: seg1, 
    canvas: canvasOuterHTML, 
    seg2: seg2 
}); 
을 완료 읽기 : 그 호출은 다음과 같습니다?

감사합니다.

답변

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

와우! 당신이 작업하고있는 문제를 해결하는 것과 같은 새로운 개념을 가르쳐주는 것은 없습니다. 감사! – Steve

1

사용하는 배열로 반환 deferreds을 밀어 $.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 
}); 
관련 문제