使用 ajax 更新购物车商品计数时出现 window.checkout.quoteData 或商店代码未定义错误
Getting window.checkout.quoteData or store code are undefined error when cart item count updated using ajax
我创建了一个具有自由文本订购功能的自定义页面,并调用自定义 add to cart API
将商品添加到购物车。
添加商品后,我需要用更新后的数量更新购物车商品数量。我尝试使用
require([
'jquery',
'Magento_Checkout/js/action/get-totals'
], function ($, getTotalsAction) {
'use strict';
var deferred = $.Deferred();
getTotalsAction([], deferred);
});
但是抛出错误:
未捕获的类型错误:无法在 quote.js:34
处读取未定义的 属性 'quoteData'
和
url-builder.js:12 Uncaught TypeError: 无法读取 属性 'storeCode' of undefined at url-builder.js:12
这里有什么遗漏吗?
我提到了 https://magento.stackexchange.com/questions/210517/error-javascript-define-magento2-window-checkout-quotedata-or-store-code-are-u,它没有任何可行的解决方案。
问题是 quoteData 存在于 window.checkoutConfig - 此数据只会在结帐页面上设置,您不会有很多必需的 js 模块加载到自定义页面上以正确设置此数据.
这可能是一本有用的读物:https://www.yireo.com/blog/2017-08-20-do-not-depend-on-window-checkoutconfig
我能够使用以下代码为我的场景实现这一点。它可能对某人有帮助
require([
'Magento_Customer/js/customer-data'
], function (customerData) {
var sections = ['cart'];
customerData.invalidate(sections);
customerData.reload(sections, true);
});
我创建了一个具有自由文本订购功能的自定义页面,并调用自定义 add to cart API
将商品添加到购物车。
添加商品后,我需要用更新后的数量更新购物车商品数量。我尝试使用
require([
'jquery',
'Magento_Checkout/js/action/get-totals'
], function ($, getTotalsAction) {
'use strict';
var deferred = $.Deferred();
getTotalsAction([], deferred);
});
但是抛出错误: 未捕获的类型错误:无法在 quote.js:34
处读取未定义的 属性 'quoteData'和
url-builder.js:12 Uncaught TypeError: 无法读取 属性 'storeCode' of undefined at url-builder.js:12
这里有什么遗漏吗?
我提到了 https://magento.stackexchange.com/questions/210517/error-javascript-define-magento2-window-checkout-quotedata-or-store-code-are-u,它没有任何可行的解决方案。
问题是 quoteData 存在于 window.checkoutConfig - 此数据只会在结帐页面上设置,您不会有很多必需的 js 模块加载到自定义页面上以正确设置此数据.
这可能是一本有用的读物:https://www.yireo.com/blog/2017-08-20-do-not-depend-on-window-checkoutconfig
我能够使用以下代码为我的场景实现这一点。它可能对某人有帮助
require([
'Magento_Customer/js/customer-data'
], function (customerData) {
var sections = ['cart'];
customerData.invalidate(sections);
customerData.reload(sections, true);
});