jquery сохранить объект данных json в cookie - PullRequest
106 голосов
/ 19 ноября 2010

Как сохранить данные JSON в файле cookie?

Мои данные JSON выглядят так

$("#ArticlesHolder").data('15', {name:'testname', nr:'4',price:'400'});
$("#ArticlesHolder").data('25', {name:'name2', nr:'1', price:'100'});
$("#ArticlesHolder").data('37', {name:'name3', nr:'14', price:'60'});

И я хочу сделать что-то вроде

var dataStore = $.cookie("basket-data", $("#ArticlesHolder").data());

и для извлечения данных, которые я хочу загрузить в $("#ArticlesHolder") как

$.each($.cookie("basket-data"), function(i,e){
 $("#ArticlesHolder").data(i, e);
});

Кто-нибудь знает, нахожусь ли я на правильном пути, или это нужно сделать другим способом? Проще говоря, как поместить и извлечь данные JSON из файла cookie?

Ответы [ 6 ]

190 голосов
/ 19 ноября 2010

Вы можете сериализовать данные в формате JSON, например:

$.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

Затем, чтобы получить его из куки:

$("#ArticlesHolder").data(JSON.parse($.cookie("basket-data")));

Это зависит от JSON.stringify() и JSON.parse() для сериализации / десериализации вашего объекта данных, для более старых браузеров (IE <8) включите <a href="http://www.json.org/js.html" rel="noreferrer"> json2.js для получения JSON функциональность. В этом примере используется плагин jQuery cookie

40 голосов
/ 23 января 2013

Теперь уже нет необходимости использовать JSON.stringify явно. Просто выполните эту строку кода

$.cookie.json = true;

После этого вы можете сохранить любой объект в cookie, который будет автоматически преобразован в JSON и обратно из JSON при чтении cookie.

var user = { name: "name", age: 25 }
$.cookie('user', user);
...

var currentUser = $.cookie('user');
alert('User name is ' + currentUser.name);

Но библиотека JSON не поставляется с jquery.cookie, поэтому вы должны загрузить ее самостоятельно и включить на html-страницу до jquery.cookie.js

7 голосов
/ 19 ноября 2010

используйте JSON.stringify(userData), чтобы скрыть объект json в строку.

var dataStore = $.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

и для возврата из cookie используйте JSON.parse()

var data=JSON.parse($.cookie("basket-data"))
3 голосов
/ 03 июня 2015

Не рекомендуется сохранять значение, возвращаемое из JSON.stringify(userData), в файл cookie; это может привести к ошибке в некоторых браузерах.

Перед использованием вы должны преобразовать его в base64 (используя btoa), а при чтении конвертировать из base64 (используя atob).

val = JSON.stringify(userData)
val = btoa(val)

write_cookie(val)
2 голосов
/ 13 мая 2018

С сериализацией данных как JSON и Base64, зависимость jquery.cookie.js:

var putCookieObj = function(key, value) {
    $.cookie(key, btoa(JSON.stringify(value)));
}

var getCookieObj = function (key) {
    var cookie = $.cookie(key);
    if (typeof cookie === "undefined") return null;
    return JSON.parse(atob(cookie));
}

:)

0 голосов
/ 19 октября 2012

Попробуйте это: https://github.com/tantau-horia/jquery-SuperCookie

Быстрое использование:

создать - создать cookie

проверить - проверить наличие

проверить -проверить значение cookie, если JSON

check_index - проверить, существует ли индекс в JSON

read_values ​​- прочитать значение cookie в виде строки

read_JSON - прочитать значение cookie в виде объекта JSON

read_value - прочитать значение индекса, хранящегося в объекте JSON

replace_value - заменить значение из указанного индекса, хранящегося в объекте JSON

remove_value - удалить значение и индекс, сохраненный в объекте JSON

Просто используйте:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_json("name_of_the_cookie");
...