You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AJAX添加商品后刷新Shopify Dawn主题购物车抽屉

解决Dawn主题AJAX加购后无需刷新更新购物车抽屉的问题

你的代码里调用drawer.renderContents(response)存在问题——cart/add.js的响应仅返回刚添加的商品信息,并非完整的购物车数据,而购物车抽屉需要完整的购物车状态(商品列表、总价、数量等)才能正确更新。以下是两种可行的修改方案:

方案1:利用Dawn主题内置的购物车工具函数

Dawn主题自带了封装好的购物车处理方法,直接调用即可自动刷新抽屉和购物车计数:

let formData = {
  'items': [{
    'id': productID,
    'quantity': 1
  }]
};
fetch(window.Shopify.routes.root + 'cart/add.js', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(formData)
})
.then(response => response.json())
.then(() => {
  // 调用主题内置方法,同步更新购物车抽屉和计数
  window.ShopifyCart.fetchCart().then(() => {
    window.ShopifyCart.renderCart();
  });
})
.catch((error) => {
  console.error('Error:', error);
});

方案2:手动获取完整购物车数据并渲染抽屉

如果内置方法不生效,可以手动请求完整购物车数据再渲染抽屉:

let formData = {
  'items': [{
    'id': productID,
    'quantity': 1
  }]
};
fetch(window.Shopify.routes.root + 'cart/add.js', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(formData)
})
.then(() => {
  // 请求完整购物车数据
  return fetch(window.Shopify.routes.root + 'cart.js');
})
.then(cartResponse => cartResponse.json())
.then(cartData => {
  // 传入完整购物车数据渲染抽屉
  drawer.renderContents(cartData);
  // 同步更新页面上的购物车数量气泡(如果有)
  const cartCount = document.querySelector('.cart-count-bubble');
  if (cartCount) cartCount.textContent = cartData.item_count;
})
.catch((error) => {
  console.error('Error:', error);
});

核心说明

  • 不要直接用cart/add.js的响应渲染抽屉,必须通过cart.js获取完整的购物车状态数据。
  • Dawn主题的购物车抽屉组件依赖完整的购物车对象来渲染商品列表、价格等内容,不完整的数据会导致抽屉无法正常更新。

内容的提问来源于stack exchange,提问作者Joy Mendonca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:12:12