【问题标题】:Shopify Ajax API is not accepting propertiesShopify Ajax API 不接受属性
【发布时间】:2016-02-19 19:25:47
【问题描述】:

我正在尝试通过 shopify ajax api 传递三种产品。它发送变体 ID 和数量,但不发送属性。代码如下。如果我将 request.properties 添加到 Shopify.addItem 函数,它会在一件商品后停止,并给我一个弹出消息,说一件商品已添加到购物车中。它不会添加其他两项,也不会重定向。如果我从 Shopify.addItem 函数中删除 request.properties,它会将所有三个项目添加到购物车但没有属性。

从@miglio 代码修改的最终代码

var FreeTrial={
    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',
            async:false,
            data: params,
            success: function(){
                if(typeof callback === 'function'){
                    callback();
                }
            },
            error: function(){}
        });
    },
    recursive:function(){
        FreeTrial.addItem(FreeTrial.data[FreeTrial.ini].qty,FreeTrial.data[FreeTrial.ini].id,FreeTrial.data[FreeTrial.ini].properties,function(){
          //console.log(FreeTrial.data[FreeTrial.ini]);
          FreeTrial.ini += 1;
          if(FreeTrial.ini < FreeTrial.total){
            FreeTrial.recursive();
          }else{
            //return false;
            document.location.href = '/cart';
          }
        });
      },

    begin:function(){
        /* SET YOUR ARRAY QTY's' ID's*/
        FreeTrial.data = [
            {
                "qty": '1',
                "id": 'VARIANT_ID_GOES_HERE',
                "properties": false
            },
            {
                "qty": '1',
                "id": 'VARIANT_ID_GOES_HERE',
                "properties": false
            },
            {
                "qty": '1',
                "id": 'VARIANT_ID_GOES_HERE',
                "properties": false
            },
            {
                "qty": '1',
                "id": 'VARIANT_ID_GOES_HERE',
                "properties": false
            },
            {
                "qty": '1',
                "id": 'VARIANT_ID_GOES_HERE',
                "properties": {
                    "recurring_price": "200.00",
                    "shipping_interval_frequency": "30",
                    "shipping_interval_unit_type": "days",
                    "subscription_id": "12599"
                  }
            }
        ];
        FreeTrial.total = FreeTrial.data.length;
        FreeTrial.recursive();
    }
  }

  FreeTrial.begin();

【问题讨论】:

  • 你到底得到了什么错误?
  • 我没有收到错误。如果我按上述方式运行代码,它只会将一项添加到购物车,并且不会重定向到购物车。如果我从 addItem 函数中删除“request.properties”,它会将所有三个项目添加到购物车但没有属性
  • 可以给Shopify.addItem()的代码吗?

标签: javascript jquery object shopify


【解决方案1】:

要添加属性,我使用此功能并且工作正常。

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(){}
  });
}

//Example :
var qty = 1;
var id  = 123456;//variant_id
var properties: {
  "recurring_price": "12",
  "shipping_interval_frequency": "34",
  "shipping_interval_unit_type": "56",
  "subscription_id": "78"
}
//
addItem(qty,id,properties,function(){
    console.log('done');
});

好吧,我为多个项目编写了这段代码,并保存了一个要点:
multiple add to cart

【讨论】:

  • 我将如何处理三个项目?
  • 使用callback的循环
  • 我已在 REVISED CODE 下的原始帖子中添加了我所拥有的内容。它正在工作,但它总是给我比我实际拥有的少一个
  • 我正在用最终代码替换我的原始代码,供任何需要这样做的人使用。谢谢@miglio
  • 更改 var 属性 = {
【解决方案2】:

到端点 url:'/cart/add.js' 的任何 POST 都可以包含属性。如果属性设置正确,它就像一个魅力。您可以根据需要为变体分配任意数量的属性。已经工作了5年了?这个功能至少已经工作了那么长时间……没问题。

addItemWithProperties: function(variant_id, quantity, properties, callback) {
  var quantity = quantity || 1;
  if(properties) {
    var data = properties.join("&")+"&quantity="+quantity+"&id="+variant_id;
  } else {
    var data = "quantity="+quantity+"&id="+variant_id;
  }
  var params = {
    type: "POST",
    url: "/cart/add.js",
    data: data,
    dataType: "json",
    success: function(line_item) {
      if((typeof callback) === "function") {
        callback(line_item)
      } else {
        Shopify.onItemAdded(line_item)
      }
    },
    error: function(XMLHttpRequest, textStatus) {
      Shopify.api.onError(XMLHttpRequest, textStatus)
    }
  };
  $.ajax(params)
},

【讨论】:

    【解决方案3】:

    编辑。我想你可以手动拨打电话

    add to cart


    考虑到 Shopify.addItem() 函数,straight off their API 我不确定您是否可以简单地添加这样的参数。

    我的猜测是额外的参数具有函数不运行的效果。

    【讨论】:

    • 是的,我现在也发现了这一点。我将修改上面的代码。我仍然无法让属性通过
    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多