112

如何将 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);
});

有谁知道我是否走在正确的轨道上,还是应该以其他方式完成?简而言之,我如何从 cookie 中放入和提取 json 数据?

4

6 回答 6

201

您可以将数据序列化为 JSON,如下所示:

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

然后从cookie中获取它:

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

这依赖于JSON.stringify()JSON.parse()序列化/反序列化您的数据对象,因为旧版浏览器 (IE<8) 包含json2.js来获取JSON功能。此示例使用jQuery cookie 插件

于 2010-11-19T12:41:59.903 回答
40

现在已经不需要JSON.stringify显式使用了。只需执行这行代码

$.cookie.json = true;

之后,您可以将任何对象保存在 cookie 中,读取 cookie 时会自动转换为 JSON 并从 JSON 转换回来。

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

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

但是jquery.cookie没有自带json库,所以需要自己下载并在jquery.cookie.js之前包含到html页面中

于 2013-01-22T21:51:03.433 回答
7

用于JSON.stringify(userData)将 json 对象转换为字符串。

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

并从使用 cookie 中恢复过来JSON.parse()

var data=JSON.parse($.cookie("basket-data"))
于 2010-11-19T12:42:38.637 回答
5

JSON.stringify(userData)将返回的值保存到 cookie不是一个好习惯;它可能会导致某些浏览器出现错误。

使用前先转换成base64(使用btoa),读取时从base64转换(使用atob)。

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

write_cookie(val)
于 2015-06-03T07:49:49.307 回答
2

将数据序列化为 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));
}

:)

于 2018-05-13T11:49:36.533 回答
0

试试这个: https ://github.com/tantau-horia/jquery-SuperCookie

快速使用:

创建 - 创建 cookie

检查 - 检查存在

verify - 如果是 JSON,则验证 cookie 值

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");
于 2012-10-19T09:21:09.263 回答