【问题标题】:update and remove json data from a cookie containing shopping cart items从包含购物车项目的 cookie 中更新和删除 json 数据
【发布时间】:2014-02-27 07:31:41
【问题描述】:

我通过 jquery 将购物车项目(json 数据)存储在 cookie 中。 我可以将项目添加到 cookie 中。以下是javascript代码。

$.cookie.json = true;
// empty cart
var emptydata = { "cartItems": [] };

var devicedata = new function (deviceId, qty) {
return { "deviceId": deviceId, "quantity": qty };
}


// to create json data
function createJSON(id, qty) {
    if (!$.cookie('devicelist')) {
      $.cookie('devicelist', emptydata);
    }
 devicedata.deviceId = id;
 devicedata.quantity = qty;
 cart = $.cookie('devicelist');
 cart.cartItems.push(devicedata);
 return cart;
}

// function to be called , when Add to cart button is clicked
function saveItems() {

   var deviceId = $('#lbldeviceId').html();
   var Qty = $('#txtQty').val();

   var jsondata = createJSON(deviceId, Qty);

   $.cookie('devicelist', jsondata);

}

示例 json 数据

 { "cartItems": [
   {
     "deviceId": "1",
     "quantity": "1"
   },
   {
     "deviceId": "2",
     "quantity": "1"
   }
]}

如何更新现有设备的数量并删除 cookie 中的现有设备? 希望可以通过遍历项目来完成。如果还有其他选择,请建议我。我的方法也很好,还是应该采用其他方法?

【问题讨论】:

    标签: javascript jquery cookies shopping-cart jquery-cookie


    【解决方案1】:

    您的方法似乎是正确的......

    要更新和删除购物车中的商品,您可以使用以下代码:

    function modifyItem(deviceId, Qty)
    {
        var cart_items = $.cookie('devicelist').cartItems;
    
        $(cart_items).each( function(i, v) {
          if (v && v.deviceId == deviceId) {      
          cart_items[i].quantity = Qty;   
          }
        });
        var obj = { "cartItems": cart_items };
        $.cookie('devicelist', obj);
    }
    
    function deleteItem(deviceId)
    {
        var cart_items = $.cookie('devicelist').cartItems;
    
        $(cart_items).each( function(i, v) {
          if (v && v.deviceId == deviceId) {    
          cart_items.splice(i, 1);    
          }
        });
        var obj = { "cartItems": cart_items };
        $.cookie('devicelist', obj);
    } 
    

    如何调用它们的示例:

    <a href="javascript:void(0);" onClick="javascript:modifyItem(3, 5);">Modify deviceId 3</a>
    <a href="javascript:void(0);" onClick="javascript:deleteItem(4);">Delete deviceId 4</a>
    

    编辑:

    根据评论中OP的要求,我修改了上述功能:

    function modifyItem(deviceId, Qty)
    {
        cart = $.cookie('devicelist');  
        $(cart.cartItems).each( function(i, v) {
          if (v && v.deviceId == deviceId) {
            v.quantity = Qty;
            $.cookie('devicelist', cart);
          }
        });    
    }
    
    function deleteItem(deviceId)
    {
        cart = $.cookie('devicelist');  
        $(cart.cartItems).each( function(i, v) {
          if (v && v.deviceId == deviceId) {
            cart.cartItems.splice(i, 1);
            $.cookie('devicelist', cart);
          }
        }); 
    }
    

    【讨论】:

    • shasi,谢谢回复,是否可以修改现有的json数据,而不是在这里硬编码var obj = { "cartItems": cart_items };。因为这里正在创建新的 json。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多