2014-11-26 5 views
0

다음 AJAX가 있습니다.jQuery에서 변수의 riptscope

내가해야 할 일은 외부의 $.ajax 호출을 사용하는 것입니다. 변수 tax_rate이 [1]에 적절한 값을 보여주기 때문에 내 AJAX 호출이 제대로 작동하지만 [2]에서는 변수가 쓸모 없게됩니다.

가변 범위에 문제가 있습니까?

<script> 
jQuery(document).ready(function($) { 

    $(document).on('blur','#form',function() { 

     var subsum = 0; 
     var tax_rate = 0; 
     var tax_amount = 0; 

     $('.form-row').each(function() { 

      // calculate sums and totals per each form-row 
      subsum = Number($(this).find('.unit').val() * $(this).find('.price').val()).toFixed(2); 
      $(this).find('.subsum').empty().val(subsum); 

      // calculate tax amount 
      var tax_id= $(this).find('.tax_code').val(); 
      var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 

      // call ajax to retrieve the tax rate 
      $.ajax({ 
       url: ajaxurl, 
       data:' action=get_tax_rate_by_id&tax_id='+tax_id, 
       type:'GET', 
       success:function(results) { 
        tax_rate = results; 
        alert(tax_rate); // [1] Obviously, this one properly alerts tax rate.    
       } 
      }); 

      alert(tax_rate); // [2] This one always alerts 0. 

     }); 

    }); 
}); 

+0

_AJAX_는 __Asynchronous__를 나타내며, _ 존재하지 않거나 동시에 발생 함을 의미합니다 ._. – Satpal

답변

1

. 코드가 조금 느려지 긴하지만 아약스 외부에서는 tax_rate를 반환 할 수 있습니다. 이를 위해서는 ajax 옵션에

async:false 

을 사용할 수 있습니다.

+0

아약스 호출이 완료되기 전에 [2]가 실행될 가능성이 있습니까? 내가 참조. 고맙습니다. 동기식으로 작동하도록 제안했지만 코드가 너무 느려졌습니다. 다른 조언? – Dongsan

+0

답변에서 언급 한 바 있습니다. 동기식 아약스 호출의 경우 코드가 느려집니다. –

0

당신이 시도하는 경우 :

당신은 경고는 자바 스크립트를 비동기 적으로 실행하여 Ajax 요청을 완료하기 전에 실행 얻을 것이다 동기 때문에 Ajax 호출을해야
  success:function(results) { 
       return tax_rate = results;       
      } 
+0

고맙습니다.하지만 작동하지 않았습니다. – Dongsan

관련 문제