2015-01-11 4 views
0

제목에 대해 유감이지만 어떻게 부르는지는 몰랐습니다. DOM 조작이 끝나기를 기다리는 Ajax를 기다리는 중

나는 성공을 페이지에 일부 HTML 요소를 추가하는 일부 아약스 통화 기능을 가지고 :

function ajax_submit_append(form_data, url, result, complete) { 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: form_data, 
     success: function(msg) { 
       var res = $(msg).filter('span.redirect'); 
       if($(res).html() != null){ 
        window.location.replace($(res).html()); 
        return false; 
       } 
      $(result).append(msg); 
     }, 
     complete: complete() 
    }); 
}; 

기능 가장 중요한 것은으로 .Append 다음이 아약스 기능이 일부에서 호출된다 성공에 무언가를 이 같은 버튼 .click 기능 :

$(function() { 
    $("#product_list_add_btn").click(function(e){ 
     ajax_submit_append(
        form_data = { 
         product_name: $('.selectpicker option:selected').val(), 
         amount: $('#amount').val()}, 
         "<?php echo site_url('admin_panel/new_order/add_product'); ?>", 
         '#add_product_result', 
         calculateSum 
       ); 
     return false; 
     }); 
}); 

내가 달성하고자하는 것은으로 .Append가 아약스를 통해 수행 한 후 calculateSum 기능 (합계 테이블 열이)라고한다는 것입니다. 내가 당신에게 calculateSum을 제시,하지만 난 거기에 결함이 아무것도 생각 : 나는이 완료 이벤트를 아약스에 calculateSum를 추가 할 때

지금은

, 여전히 새로운 행으로 .Append

편집으로 테이블에 추가되기 전에 호출된다.

function calculateSum() { 
    var sum = 0; 
    // iterate through each td based on class and add the values 
     $(".countit").each(function() { 

     var value = $(this).text(); 
     // add only if the value is number 
     if(!isNaN(value) && value.length != 0) { 
      sum += parseFloat(value); 
     } 
    }); 
    $('#total_price').text(sum); 
    alert("test"); 
}; 

만약 내가 추측해야만한다면, 나는 click 이벤트로 그 무언가를 말할 것입니까?

해결 방법? jqXHR의 완료() 메소드를 사용하여

+0

은 내가 먼저 당신은 코드에서 볼 수 있듯이에서 complete 이벤트로했지만, 결과를 예상되지 않았다. async를 추가 한 후 : false, 변경하지 않음, alert ("test"), 항상 행이 추가되기 전에 팝업됩니다. – patrykos91

답변

1

시도 :

function ajax_submit_append(form_data, url, result, complete) { 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: form_data, 
     success: function(msg) { 
       var res = $(msg).filter('span.redirect'); 
       if($(res).html() != null){ 
        window.location.replace($(res).html()); 
        return false; 
       } 
      $(result).append(msg); 
     } 
    }).done(complete); 
}; 
+0

이제 제대로 작동합니다. 고맙습니다. 그런데 .done과 complete 이벤트의 차이점은 무엇입니까? – patrykos91

관련 문제