Как сохранить массив объектов в файле cookie с помощью jQuery $.cookie()?
У меня есть список объектов 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, а Console отметил, что people
- строка ("[object Object],[object Object],[object Object]"
) и что функция push не существует.
Что происходит? Каков правильный способ хранения и извлечения списка объектов?
Ответы
Ответ 1
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));
Ответ 2
Я попытался это сделать сегодня и не смог заставить его работать. Позже я узнал, что это потому, что у меня было 3 очень больших объекта, которые я пытался сохранить в cookie.
То, как я работал, это хранение данных в локальном хранилище браузеров.
Пример:
localStorage.setItem("test2", JSON.stringify(obj) )
localStorage.getItem("test2")
Дополнительная информация о локальном хранилище: файлы cookie и локальное хранилище
4 часа моего времени на это, не делайте ту же ошибку.