代码之家  ›  专栏  ›  技术社区  ›  joshmoto

取消数据序列化并从数组中移除项,然后使用jquery重新序列化数组

  •  0
  • joshmoto  · 技术社区  · 6 年前

    我正在尝试更新使用下面的PHP生成的序列化数组…

    // my php and array serialization
    $myArray = array( 161 => true, 180 => true );
    $myData = serialize($myArray);
    setcookie('my_cookie', $myData);
    

    我正在使用jquery从我的cookie中获取这个序列化数据。

    // remove item click function
    $('.remove-item').click( function(e) {
    
        // get the serialized data
        console.log(Cookies.get('my_cookie'));
    
    });
    

    这是我返回的序列数据

    a:2:{i:161;b:1;i:180;b:1;}
    

    我希望能够取消此数据的序列化并从数组中删除一个项,然后再次序列化数据并重新设置我的cookie。

    所以我可以从我的 .remove-item 按钮,并从未序列化的数组中删除此值。

    它需要像这样的工作,我只是不知道该怎么做。看下面我的演练,但这显然不起作用。

    JQuery

    // remove item click function
    $('.remove-item').click( function(e) {
    
        // get the item id number
        var removeItem = $(this).data('id');
    
        // 161
    
        // get the serialized data
        var myData = Cookies.get('my_cookie'));
    
        // a:2:{i:161;b:1;i:180;b:1;}
    
        // unserialize data back to an array
        var myArray = unserialize(myData);
    
        // array(2) { [161]=> bool(true) [180]=> bool(true) }
    
        // remove 161 from my array
        myArray = $.grep(myArray, function(value) {
            return value != removeItem;
        });
    
        // array(1) { [180]=> bool(true) }
    
        // re serialize my array 
        var newData = serialize(myArray);
    
        // a:1:{i:180;b:1;}
    
        // re set cookie with new serialized data
        Cookies.set('my_cookie', newData);
    
    });
    

    HTML

    <button class="remove-item" data-id="161">Remove Item</button>
    

    任何想法或建议都会受到赞赏。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Chris    6 年前

    为了在客户机/服务器端处理数据,而不是使用序列化,我将把它改为JSON。这样你就可以跑了 JSON.parse(data) 返回数据数组。

    PHP

    $myArray = array( 161 => true, 180 => true );
    $myData = json_encode($myArray);
    setcookie('my_cookie', $myData);
    

    JQuery -

    // remove item click function
    $('.remove-item').click( function(e) {
    
        // get the item id number
        var removeItem = $(this).data('id');
    
        // get the serialized data
        var myData = Cookies.get('my_cookie'));
    
        // convert cookie string to data
        var myArray = JSON.parse(myData);
    
        // myArray = {"161":true,"180":true}
    
        // remove our value
        delete myArray[removeItem];
    
        // turn the array back to string
        var newData = JSON.stringify(myArray);
    
        // re set cookie with new serialized data
        Cookies.set('my_cookie', newData);
    
    });
    

    这应该能解决你的问题。)