【问题标题】:Open modal cart after cart is updated更新购物车后打开模态购物车
【发布时间】: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


【解决方案1】:

在这里尝试用这个替换你的“else”

else {
  var tmpVar = $.get("/cart"); // trying to trigger the page (we are not going to do anything with this variable)
  $('#ajaxifyModal').addClass('is-visible'); // open the modal
}

【讨论】:

  • 嗨,里卡多,不起作用。我可以看到默认的 AddToCart 包含 3 个 AJAX 调用:对“/cart”的 POST 请求、对“/cart.js”的 GET 请求和对“/cart”的 GET 请求。之前尝试手动触发第 2 次和第 3 次,但总是失败。我假设我必须以某种方式触发“购物车重建”,响应 GET“/cart”(或“/cart.js”)。这有意义吗?
  • 好吧,明白了……你得到了带有GET /cart.js 的卡片,但你从不更新模式中的值。你能给我模态代码,这样我就可以写一些更新的东西了吗?
  • 看看我们的分期:welovestaging.myshopify.com - 密码:freemp
  • 两个用于测试的变体ID:7060944977963、7060878753835(替换我发布的代码中的#variant_id_A、#variant_id_B)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2018-03-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2018-12-28
相关资源
最近更新 更多