2011-03-31 110 views
6

我試圖將json對象存儲在cookie中,但即時通訊遇到了一些問題。 我可以創造我的對象是這樣的:在cookie中存儲和檢索json對象

product = { 
    "name" : "prodname", 
    "quantity" : 4 
} 

我然後保存這個對象在我的cookie。隨着更多產品被添加(它是一個購物籃),我通過在cookie字符串的末尾添加新對象來添加更多的字符串(所以我基​​本上有很多小的單獨對象)。我無法將對象從cookie字符串中取出。當我嘗試從cookie中讀取對象時,$.parseJSONeval都會失敗。任何幫助,將不勝感激。

+1

希望你知道,餅乾有一個非常有限的空間。你可能應該看看本地存儲。 – epascarello 2011-03-31 15:10:14

+0

這是4K ...沒有太多 – ezmilhouse 2011-03-31 15:49:25

回答

9

這也許應該是這樣的:

{"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); 
+0

如何在將更多新產品添加到購物籃時向產品添加新產品? – richzilla 2011-03-31 15:07:33

+0

爲什麼使用'$ .parseJSON()'而不是'JSON.parse()'? jQuery版本更強大嗎? – 2014-09-25 00:24:20

+0

向後兼容性... – 2014-09-25 00:26:03

6

將它從JSON.stringify(cookieStr)返回的值保存到cookie不是一個好的做法。它可能導致某些瀏覽器出現錯誤。

使用它之前,你應該把它轉換爲base64(使用BTOA),閱讀它的時候,從轉換的base64(使用ATOB)

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

write_cookie(val) 
+0

一個URL編碼的值也很好,[可以在IE <10]上使用(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) – z0r 2015-08-16 12:38:24

+0

「it可能導致某些瀏覽器出現bug「什麼bug?有更多的上下文或鏈接指出錯誤是什麼,這將會有所幫助。 – 2017-10-03 19:20:57

+0

javascript錯誤。 – 2017-10-04 20:03:51