【发布时间】:2022-01-04 09:49:45
【问题描述】:
我希望你在 update.js 中使用测试变量,但是当我用作变量时它显示错误但是当我直接传递这个值时它可以工作 有人可以告诉我如何使用动态变量来更改购物车中现有产品的数量
我已经更新了我的代码它将只允许用户添加 5 个项目超过 5 个项目将被删除它将创建如下所示的字符串 32082238341235:0,39470423048307:0,32164693278835:0,32164693835891:1
最后所有的 ID 和数量都会被 update.js 更新
我在最后一步显示错误 {"status":404,"message":"购物车错误","description":"找不到变体"}
当我尝试更新所有产品时
jQuery.getJSON('/cart.js', function(cart) {
var items_new = cart.items;
var count = 0;
count = cart.item_count;
var item_to_remove = count - 5;
if (count > 5) {
var item_to_remove = count - 5;
var combine = ""
if (item_to_remove > 0) {
for (var i = 0; i < items_new.length; i++) {
if (count > 5) {
var c_id = items_new[i].variant_id;
var c_quantity = items_new[i].quantity;
if (c_quantity >= item_to_remove) {
var q = c_quantity - item_to_remove
var data_multiple = c_id + ":" + q + ",";
debugger;
count = count - item_to_remove;
console.log(data_multiple);
var combine = combine + data_multiple;
} else {
var data_single = c_id + ":" + 0 + ",";
count = count - c_quantity;
item_to_remove = item_to_remove - c_quantity
console.log(data_single)
var combine = combine + data_single;
}
}
}
console.log(combine.slice(0, -1));
var test = combine.slice(0, -1);
console.log({
updates: {
test
}
});
jQuery.post('/cart/update.js', {
updates: {
test
}
});
}
t._rerenderCart()
}
t.sidebarDrawer.open()
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
【问题讨论】:
-
从哪里调用这个 getJSON 函数?
-
@kiner_shah 这是shopify的默认设置它会获取所有购物车数据
-
看起来您正在
combine变量中构建一个字符串,最终成为test变量。因此,test是 一个字符串,类似于"794864229:0,794864101:5"。你需要它是一个实际的对象。另外,{ updates: { test } }是{ updates: { test: "whatever the value of test is" } }的简写,与{ updates: test }不同。 (这是相关的,因为test不是有效的variant_id。)现在,您会得到类似{ updates: { test: "794864229:0,794864101:5" } }的输出。 -
正如@natancodes 指出的那样,您应该将适当的对象传递给更新,而不是字符串。
-
我会通过将
var combine = ""更改为var combine = {}来接近它。从那里开始,您可以将属性分配给对象,而不是像data_multiple这样构造字符串。
标签: javascript arrays json api shopify