【发布时间】:2018-04-04 12:54:41
【问题描述】:
我想在浏览产品页面 A 时通过一个“添加到购物车”按钮添加两种不同的产品(A 和 B)到购物车。每个产品都有自定义属性 也需要传输到购物车。 我们使用“modal”购物车选项。
在github找到这段代码:
var MGUtil = {
data: [],
ini: 0,
total: 0,
addItem: function(qty, id, properties, callback) {
var params = { quantity: qty, id: id };
if (properties != false) {
params.properties = properties;
}
$.ajax({
type: 'POST',
url: '/cart/add.js',
dataType: 'json',
data: params,
success: function() {
if (typeof callback === 'function') {
callback();
}
},
error: function() {}
});
},
recursive: function() {
MGUtil.addItem(MGUtil.data[MGUtil.ini].qty, MGUtil.data[MGUtil.ini].id, MGUtil.data[MGUtil.ini].properties, function() {
MGUtil.ini += 1;
if (MGUtil.ini < MGUtil.total) {
MGUtil.recursive();
} else {
document.location.href = '/cart';//GO TO THE CART AFTER ADDING ITEMS
}
});
},
begin: function() {
/*SAMPLE*/
/* SET YOUR ARRAY QTY's' ID's PROPERTIES(FALSE IF IS EMPTY)*/
MGUtil.data = [
{ "id": "#variant_id_A", "qty": 2, "properties": { "data1": "1" } },
{ "id": "#variant_id_B", "qty": 3, "properties": { "data2": "1" } }
];
MGUtil.total = MGUtil.data.length;
MGUtil.recursive();
}
}
MGUtil.begin();
唯一缺少的是我想打开“模态”购物车而不是去购物车页面。
我可以显示购物车:
$('#ajaxifyModal').addClass('is-visible');
但是当我在运行上面的代码后在产品页面上执行此操作时,内容不会更新。刷新页面将是一种解决方案——虽然不是很漂亮。
如何在不离开页面的情况下更新购物车内容并打开模态购物车?
更新
认为这是接收更新的购物车内容的 AJAX 调用:
$.ajax({
type: 'GET',
url: '/cart.js',
dataType: 'json',
success: function(cart) {
console.log(cart);
},
error: function() {}
});
【问题讨论】:
-
你什么时候执行这个函数:$('#ajaxifyModal').addClass('is-visible'); ?它应该替换“添加项目后进入购物车”代码行。那是你所做的吗?或者您是在执行“MGUtil.begin();”之后立即调用它吗?功能?
-
我尝试替换递归函数中不起作用的
else部分。我的意思是它“有效”,但购物车是空的。我还尝试在运行“添加到购物车”功能几秒钟后手动触发它 - 仍然是空的 -
啊,好吧,我认为这可能是异步问题,但显然不是......
-
我想问题是如何在打开
#ajaxifyModal之前触发重新渲染(在shopify中?还是这个自定义代码?)。 -
这是 shopify - 代码是自定义的,但可以工作。正如您所说,唯一的问题是如何执行“要求在当前页面上更新购物车的 AJAX 调用”。
标签: javascript jquery shopify