2012-01-27 109 views
19

我的JavaScript對象的列表:

var people = [ 
    { 'name' : 'Abel', 'age' : 1 }, 
    { 'name' : 'Bella', 'age' : 2 }, 
    { 'name' : 'Chad', 'age' : 3 }, 
] 

我試圖將它們存儲在使用jQuery $ .cookie()瀏覽器cookie:

$.cookie("people", people); 

我然後檢索這個cookie,然後嘗試另一個推入的對象是:

var people = $.cookie("people"); 
people.push(
    { 'name' : 'Daniel', 'age' : 4 } 
); 

然而,這不起作用;我分析在Firebug這個代碼,控制檯指出,people是一個字符串("[object Object],[object Object],[object Object]"),而推送功能並不存在。

這是怎麼回事?什麼是存儲和檢索對象列表的正確方法?

+13

您應該將'people'的var名稱更改爲'babies' :) – ajax333221 2012-01-27 23:14:11

+0

$ .cookie(「people」,$ .param(people));這完美地工作對我來說 – Nejthe 2015-01-30 12:28:27

回答

32

Cookies只能存儲字符串。因此,您需要將您的對象數組轉換爲JSON字符串。如果你有JSON庫,你可以簡單地使用JSON.stringify(people)並存儲在cookie中,然後用$.parseJSON(people)到非字符串化它。

最後,你的代碼看起來像:

var people = [ 
    { 'name' : 'Abel', 'age' : 1 }, 
    { 'name' : 'Bella', 'age' : 2 }, 
    { 'name' : 'Chad', 'age' : 3 }, 
]; 
$.cookie("people", JSON.stringify(people)); 
// later on... 
var people = $.parseJSON($.cookie("people")); 
people.push(
    { 'name' : 'Daniel', 'age' : 4 } 
); 
$.cookie("people", JSON.stringify(people)); 
+0

謝謝你,什麼是JSON庫? – dangerChihuahua007 2012-01-27 21:21:28

+1

https://github.com/douglascrockford/JSON-js/blob/master/json2.js – 2012-01-27 21:25:42

+0

發現這非常有幫助,但這個var people = $ .parseJSON($。cookie(「people」);)應該是這個var people = $ .parseJSON($。cookie(「people」)); 「;」是不合適的。 – ARWVISIONS 2015-02-09 05:26:15

5

我今天這個嘗試並不能得到它的工作。後來我發現這是因爲我有3個非常大的對象,我試圖保存在一個cookie中。

我曾角落找尋這個問題的方法是通過存儲在瀏覽器中的信息的本地存儲。

例如:

localStorage.setItem("test2", JSON.stringify(obj)) 

localStorage.getItem("test2") 

有關本地存儲的更多信息:cookies vs local storage

4個小時我的時間發泄到這一點,不要再犯同樣的錯誤。