收听购物车更新数量 [英] Listen to shopify cart update quantity

查看:14
本文介绍了收听购物车更新数量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写Shopify应用程序,我想收听Shopify购物车更新事件。我知道当用户点击删除或增加项目数量时。Shopify向后端发送POST请求以更新卡。我的应用程序根据购物车项目数量计算发货价值。我通过脚本标记将我的应用程序脚本添加到Shopify。

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

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

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

推荐答案

所以有两种方式可以更新购物车。通过提交表单或使用Ajax API。假设您已经通过调用页面加载上的Calculate Shipping函数解决了深渊翻滚表单问题。对于基于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发出的请求。

将响应传递给Shipping函数可保存附加的Get Cart Ajax调用。

更新

如果上面的代码对您无效或未捕获所有调用,请参阅我的另一个答案,该答案也会侦听所有Fetch API调用(如果该API调用用于更新购物车)。

Listen to Cart changes using Fetch API

这篇关于收听购物车更新数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆