AJAX更新购物车数量时报window.checkout.quoteData或store code未定义错误
报错原因
两个报错均由自定义页面未加载Magento Checkout模块依赖的全局配置对象导致:
- 第一个报错是因为
window.checkout.quoteData全局对象未初始化,quote.js运行时读取不到该属性 - 第二个报错是因为
window.checkout.storeCode全局参数未定义,url-builder.js无法生成正确的接口请求地址
修复步骤
1. 在页面布局中注入Checkout全局配置
在你的自定义页面对应的布局XML文件中,添加Checkout侧边栏块,用于自动初始化所需的全局配置:
<referenceContainer name="content"> <!-- 注入Checkout全局配置初始化块 --> <block class="Magento\Checkout\Block\Cart\Sidebar" name="custom.cart.config" template="Magento_Checkout::cart/sidebar.phtml"/> </referenceContainer>
2. 修正JS逻辑
补充购物车数据依赖,加购成功后同时重载购物车本地缓存,保证计数同步更新:
require([ 'jquery', 'Magento_Customer/js/customer-data', 'Magento_Checkout/js/action/get-totals' ], function ($, customerData, getTotalsAction) { 'use strict'; var deferred = $.Deferred(); getTotalsAction([], deferred); // totals更新完成后重载购物车缓存,同步计数 deferred.done(function () { customerData.reload(['cart'], true); }); });
3. 补充兜底配置(可选)
如果添加布局块后仍有配置未加载的问题,可以在JS逻辑执行前手动初始化全局配置容器:
if (typeof window.checkout === 'undefined') { window.checkout = window.checkoutConfig || {}; }
注意事项
- 不要在自定义页面禁用Magento默认的RequireJS配置,保证基础组件可以正常加载
- 需在自定义加购接口返回成功响应后再执行上述更新逻辑,避免购物车数据未同步就触发计数更新
内容的提问来源于stack exchange,提问作者stefun
相关产品推荐
相关产品推荐

