微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

听shopify购物车更新数量

如何解决听shopify购物车更新数量

我正在编写Shopify应用程序,我想听听shopify购物车更新事件。我知道当用户单击删除增加项目数量时。 Shopify将POST请求发送到后端以更新卡。我的应用程序根据shopify购物车商品数量计算运费。我通过脚本标签将应用程序脚本添加到shopify中。

我尝试收听输入的数量,但此事件仅触发一个。我认为shopify在每次购物车更新后都会更新输入DOM,因此它可能会删除我的监听器。

 $('body').on('change','.input[name="updates[]"]',function() { console.log('HELLO')});

如何收听购物车更新事件?这似乎是一个简单的问题,但我真的找不到关于Shopify的任何答案!

解决方法

因此,有两种方式可以更新Shopify购物车。通过提交表单或使用Ajax API。假设,您已经通过在页面加载时调用计算运送功能来解决表单提交的情况。对于基于Ajax的购物车更新,没有标准事件。某些主题可能会在购物车更新时触发事件,但是对于通用应用,由于未定义标准行为,因此无法依赖它们。

因此,您可以做的是监听AJAX调用,并在满足条件时调用您的函数。 Shopify Docs for Ajax API列出了可能更新购物车的4种POST请求。因此,通过修补XMLHttpRequest的open函数,我们为load添加了一个事件侦听器,该侦听器在请求成功完成时触发。在事件回调中,我们检查URL是否是用于更新购物车的URL,然后调用更新运输功能。

const open = window.XMLHttpRequest.prototype.open;

function openReplacement() {
  this.addEventListener("load",function () {
    if (
      [
        "/cart/add.js","/cart/update.js","/cart/change.js","/cart/clear.js",].includes(this._url)
    ) {
      calculateShipping(this.response);
    }
  });
  return open.apply(this,arguments);
}

window.XMLHttpRequest.prototype.open = openReplacement;

function calculateShipping(cartJson) {
  console.log("calculate new shipping");
  console.log(JSON.parse(cartJson));
}

answer from Nicolas采取的想法

ajaxComplete 未使用,因为它仅侦听使用jQuery发出的请求。

将响应传递到您的“运送”功能可保存其他“获取购物车Ajax”调用。

更新

如果上面的代码对您不起作用或无法捕获所有调用,请查看我的其他答案,该答案还将侦听所有Fetch API调用(如果用于更新购物车)。

Listen to Cart changes using Fetch API

,

以分段主题更新购物车中的项目数量字段

步骤1:您访问Shopify管理员,点击在线商店,然后转到主题。

第2步:找到要编辑的主题,然后依次按“操作”和“编辑代码”。

第3步:查看“部分”,然后单击cart-template.liquid。如果您使用的主题没有地址,则可以访问Template目录,然后单击cart.liquid。

第4步:在输入标签中找到写为update [item.id]的短语。

第5步:将名称更改为name =“ updates []”的值。

步骤6:每当在输入标记中看到update []的名称值时,请重复上述步骤。

第7步:点击保存,您将成功更新项目数量字段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。