Javascript 在cookie中存储和检索json对象
我试图在cookie中存储json对象,但遇到了一些问题。 我可以这样创建我的对象:Javascript 在cookie中存储和检索json对象,javascript,json,cookies,Javascript,Json,Cookies,我试图在cookie中存储json对象,但遇到了一些问题。 我可以这样创建我的对象: product = { "name" : "prodname", "quantity" : 4 } 然后我将这个对象保存在我的cookie中。随着更多的产品被添加(这是一个购物篮),我通过在cookie字符串的末尾添加新的对象来添加更多的字符串(因此我基本上有很多单独的小对象)。不过,我很难从cookie字符串中提取对象。当我尝试从cookie中读回对象时,$.parseJSON和eval都失败。
product = {
"name" : "prodname",
"quantity" : 4
}
然后我将这个对象保存在我的cookie中。随着更多的产品被添加(这是一个购物篮),我通过在cookie字符串的末尾添加新的对象来添加更多的字符串(因此我基本上有很多单独的小对象)。不过,我很难从cookie字符串中提取对象。当我尝试从cookie中读回对象时,
$.parseJSON
和eval
都失败。任何帮助都将不胜感激。可能会是这样:
{"products": [
{
"name" : "prodname",
"quantity" : 4
},
{
"name" : "prodname2",
"quantity" : 3
}
]}
[]
表示数组。当您想要添加另一个产品时,您可以从cookie加载它,更新数组,然后再次保存它。如果需要,可以跳过外部对象,让cookie只是数组
编辑:说cookieStr
是你的cookie
var root = $.parseJSON(cookieStr);
root.products.push(newProduct);
cookieStr = JSON.stringify(root);
将从JSON.stringify(cookieStr)返回的值保存到cookie中不是一个好做法。它可能会导致某些浏览器出现错误 在使用它之前,您应该将它转换为base64(使用btoa),在读取它时,从base64转换(使用atob)
当更多的产品添加到篮子中时,我如何将新产品添加到该字符串中?为什么使用
$.parseJSON()
而不是JSON.parse()
?jQuery版本更健壮吗?@MikeCauser,是的,jQuery版本($.parseJSON
)有更好的浏览器支持。不幸的是,对于JSON.stringify
,在核心jQuery中没有等价物。因此,如果您支持较旧的浏览器,您最终不得不使用垫片。希望您知道Cookie的空间非常有限。你可能应该看看本地存储。URL编码的值也可以很好地工作,并且可以用于IE<10“它可能导致某些浏览器出现错误”什么错误?如果有更多的上下文或链接来说明bug是什么,那会很有帮助。
val = JSON.stringify(cookieStr)
val = btoa(val)
write_cookie(val)