Как мне сохранить массив объектов в cookie с помощью jQuery $ .cookie ()? - PullRequest
20 голосов
/ 28 января 2012

У меня есть список объектов javascript:

var people = [
   { 'name' : 'Abel', 'age' : 1 },
   { 'name' : 'Bella', 'age' : 2 },
   { 'name' : 'Chad', 'age' : 3 },
]

Я пытался сохранить их в файле cookie браузера с помощью jQuery $ .cookie ():

$.cookie("people", people);

Затем я извлекаю этот cookie и пытаюсь вставить в него другой объект:

var people = $.cookie("people");
people.push(
    { 'name' : 'Daniel', 'age' : 4 }
);

Однако это не работает; Я проанализировал этот код в Firebug, и Консоль отметила, что people была строкой ("[object Object],[object Object],[object Object]") и что функция push не существует.

Что происходит? Как правильно хранить и получать список объектов?

Ответы [ 2 ]

33 голосов
/ 28 января 2012

Cookies могут хранить только строки. Поэтому вам необходимо преобразовать ваш массив объектов в строку JSON. Если у вас есть библиотека JSON, вы можете просто использовать JSON.stringify(people) и сохранить ее в файле cookie, а затем использовать $.parseJSON(people) для ее удаления.

В конце ваш код будет выглядеть так:

var people = [
   { 'name' : 'Abel', 'age' : 1 },
   { 'name' : 'Bella', 'age' : 2 },
   { 'name' : 'Chad', 'age' : 3 },
];
$.cookie("people", JSON.stringify(people));
// later on...
var people = $.parseJSON($.cookie("people"));
people.push(
    { 'name' : 'Daniel', 'age' : 4 }
);
$.cookie("people", JSON.stringify(people));
7 голосов
/ 20 августа 2015

Я попытался сделать это сегодня и не смог заставить его работать.Позже я узнал, что это потому, что у меня было 3 очень больших объекта, которые я пытался сохранить в печенье.

Способ, которым я работал в этом направлении, заключался в хранении информации в локальном хранилище браузера.

пример:

localStorage.setItem("test2", JSON.stringify(obj) )

localStorage.getItem("test2")

дополнительная информация о локальном хранилище: куки-файлы против локального хранилища

4 часа моего времени я не решаюсь, не делайтета же ошибка.

...