Десериализовать данные и удалить элемент из массива и повторно сериализовать массив с помощью jQuery - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь обновить сериализованный массив, который был сгенерирован с использованием 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 Ответ

0 голосов
/ 20 января 2019

Ради обработки данных между клиент-серверной стороной вместо использования сериализации я бы изменил их на 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);

});

Это должно с вами разобраться:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...