jquery在cookie中保存json数据对象

Mar*_*hin 107 cookies jquery jquery-cookie

如何在cookie中保存JSON数据?

我的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'});
Run Code Online (Sandbox Code Playgroud)

我想做点什么

var dataStore = $.cookie("basket-data", $("#ArticlesHolder").data());
Run Code Online (Sandbox Code Playgroud)

和检索数据我想将其加载到$("#ArticlesHolder")

$.each($.cookie("basket-data"), function(i,e){
 $("#ArticlesHolder").data(i, e);
});
Run Code Online (Sandbox Code Playgroud)

有没有人知道我是在正确的轨道上还是应该以其他方式完成?简单地说,我如何从cookie中提取和提取json数据?

Nic*_*ver 192

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

$.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));
Run Code Online (Sandbox Code Playgroud)

然后从cookie中获取它:

$("#ArticlesHolder").data(JSON.parse($.cookie("basket-data")));
Run Code Online (Sandbox Code Playgroud)

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

  • 自古以来,Opera中不允许使用JSON http://my.opera.com/community/forums/topic.dml?id=663192&t=1358850781&page=1#comment12828912我也有此错误.即使@ cookie @ plugin使用@crayURIComponent @,也不应出现pbug. (2认同)
  • @TJ 它确实是一个插件,jQuery cookie 插件。你可以在这里找到它:http://plugins.jquery.com/cookie/ 我真的很想知道为什么它现在不在核心中...... (2认同)

Vit*_*kov 40

现在已经没有必要JSON.stringify明确使用了.只需执行这行代码即可

$.cookie.json = true;
Run Code Online (Sandbox Code Playgroud)

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

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

var currentUser = $.cookie('user');
alert('User name is ' + currentUser.name);
Run Code Online (Sandbox Code Playgroud)

但JSON库没有附带jquery.cookie,所以你必须自己下载并在jquery.cookie.js之前包含到html页面中

  • 我在没有$ .cookie.json = true的情况下尝试了这种方法,并将[object object]作为我的cookie值.然后将其设置为true并尝试将对象直接传递给cookie,并且不会填充cookie. (3认同)

XMe*_*Men 7

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

var dataStore = $.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));
Run Code Online (Sandbox Code Playgroud)

并从cookie使用回来 JSON.parse()

var data=JSON.parse($.cookie("basket-data"))
Run Code Online (Sandbox Code Playgroud)


Eya*_* Ch 5

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

在使用它之前,您应该将其转换为base64(使用btoa),并且在读取它时,从base64转换(使用atob)。

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

write_cookie(val)
Run Code Online (Sandbox Code Playgroud)

  • 您是否有遇到此问题的浏览器的参考? (3认同)
  • 在服务器端,Python 的标准 cookie 处理将拒绝包含“{”或“}”的 cookie,并默默地删除 cookie 标头中被拒绝的 cookie 后面的任何 cookie。 (2认同)