在ajax调用后更新javascript变量

时间:2019-02-08 03:46:54

标签: javascript jquery woocommerce

我正在尝试通过ajax更新购物车后动态更新通知。我似乎无法弄清楚如何重新更新所有变量,以便计算循环可以再次运行。我尝试将if语句包装到函数中,然后在updated_wc_div内再次调用它,但这没用。

有什么建议吗?

( function($) { 
  var membership_price = membership.price;
  //grab cart total from html
  var total = parseInt($('.order-total .woocommerce-Price-amount').text().replace('$',''));
  compared_price = parseInt(membership_price) - total;

  //everything runs fine on load.

  if ( total < membership_price ) {
    message = 'For <strong>$'+ compared_price +'</strong> more, gain access to unlimited downloads. <a href="/series/unlimited-membership">Become a member!</a>';
    notice = '<div class="woocommerce-info">' + message + '</div>';
    $('.woocommerce-notices-wrapper').html(notice);
  }
  //running this to know when ajax is called
  $(document.body).on('updated_wc_div',function( event ){
    $('.woocommerce-notices-wrapper').empty();
    total = parseInt($('.order-total .woocommerce-Price-amount').text().replace('$',''));
    //I believe problem is here, it doesn't update variable so it could loop again.
  });

} )(jQuery);

2 个答案:

答案 0 :(得分:0)

这是我在调用ajax调用后动态更新对象的方式:

function getCart(user_id) {
  $.ajax({
    type: "POST",
    url: "get_total_cart.php",
    data: {
      'user_id': <?php echo $user_id; ?>
    },
    beforeSend: function() {},
    success: function(response) {
      var user = JSON.parse(response);
      var total_cart = parseInt(user.total_cart);
      $("#total_cart").html(total_cart);
    }
  });
}

function addCart(product_id, user_id) {
  $.ajax({
    type: "POST",
    url: "add_cart.php",
    data: {
      'product_id': product_id,
      'user_id': user_id
    },
    beforeSend: function() {},
    success: function(response) {
      getCart(user_id);
    }
  });
}

$(document).ready(function() {
  $(".se-pre-con").fadeOut("slow");
  getCart(<?php echo $user_id; ?>);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="total_cart">Total Cart</div>

<input type="button" name="add_cart" id="add_cart" value="Add to Cart" onclick="addCart('<?php echo $product[id]; ?>', '<?php echo $user_id; ?>')" class="btn btn-info">

我希望这会有所帮助。 干杯。

答案 1 :(得分:0)

只需将您的函数放在ajax函数内部或使ajax函数“ async:false”

$.ajax({
    type: "POST",
    url: "",
    async:false,   // <========   remove asynchronous property 
    data: {},
    success: function(result) {
    }
  });
  
  
  ////////////////////////////////////////////////
  
  
  $.ajax({
    type: "POST",
    url: "", 
    data: {},
    success: function(result) {
    
    // Or put your function here
    }
  });