繁体   English   中英

使用 AJAX 更新 Shopify 中的购物车编号

[英]Updating the cart number in Shopify with AJAX

抱歉,如果这是在其他地方,但我找不到更好的方法。

我想在添加、删除或更改数量时使用 AJAX 实时更新购物车总数。

我有它的工作,但必须有一个更好的方法。 不断轮询更改感觉是错误的,我当然不想以 memory 泄漏告终。

现在,我从 JSON 获取项目计数,然后通过每秒轮询来更改 div 中的数字,让用户产生当他们更改某些内容时数字正在更新的错觉。

我尝试向添加到购物车按钮添加一个侦听器(有效)以及在数量选择器上侦听(无效)。

我确定我只是一个菜鸟,所以任何帮助表示赞赏。 下面的代码:

// Fetch the cart in JSON and change cart quantity on the fly after first product added to cart
  function doPoll(){
    setTimeout(function() {
      $.getJSON('/cart.js', function(cart) {
        $('.cart-count').html(cart.item_count);
        doPoll();
    }, 1000);
  }

更新

所以修复实际上非常简单。 我无法在购物车中的特定元素上附加侦听器的原因是尚未通过 ajax 加载购物车(呃!)

所以我所做的就是删除持续轮询,而是在页面上的 ajax 完全加载时运行我的 function:

$( document ).ajaxComplete(function() {
    //Do stuff here
});

其实还有更简单的。 如果 ajax 驱动的购物车调整发生,Timber 会给你一个可覆盖的钩子。 只需覆盖 ShopifyAPI.onCartUpdate

例如

ShopifyAPI.onCartUpdate = function(cart){
    //do something new with the cart contents
    $('.cart-count').html(cart.item_count);
};

除此之外,您的购物车计数也可通过液体在页面加载时获得,因此如果您将两者结合起来,您将得到保障:

<div class="cart-count">{{ cart.item_count }}</div>

如果您还没有实现任何其他方式添加到购物车,这很简单。

如果您查看您提到的 AJAX 函数文件,尤其是第 101 行和第 113 行的函数,您会发现这些函数与购物车更新有关。 添加您的代码$('.cart-count').html(cart.item_count); callback(cart);callback(cart); 你会很高兴去的。

没有 Jquery 的更新解决方案。 您可以使用 fetch 然后使用返回的数据来填充购物车计数。

      fetch('/cart.js')
      .then(response => response.text())
      .then((responseText) => {
        data = JSON.parse(responseText);
        var counterEl = document.querySelectorAll('.js-cart-item-count');

        counterEl.forEach((element) => {
          element.innerHTML = data.item_count
        })
      })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM