2012-01-27 7 views
19

У меня есть список объектов яваскрипта:

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

Я пытался сохранить их в браузере куки с JQuery $ .cookie():

$.cookie("people", people); 

Я тогда получить это печенье, а затем попытаться вставьте еще один объект в него:

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

Однако это не сработает; Я проанализировал этот код в Firebug, а Console отметил, что people был строкой ("[object Object],[object Object],[object Object]") и что функция push не существует.

Что происходит? Каков надлежащий способ хранения и извлечения списка объектов?

+13

вы должны изменить имя var 'people' на' babies' :) – ajax333221

+0

$ .cookie ("people", $ .param (people)); Это отлично сработало для меня – Nejthe

ответ

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

+1

https://github.com/douglascrockford/JSON-js/blob/master/json2.js –

+0

нашел это очень полезным, но этот var people = $ .parseJSON ($. Cookie («people»);) должен быть этот var people = $ .parseJSON ($. cookie ("people")); ";" неуместен. – ARWVISIONS

5

Я попытался это сегодня и не мог заставить его работать. Позже я узнал, что это потому, что у меня было 3 очень больших объекта, которые я пытался сохранить в cookie.

Способ, которым я работал, состоял в том, чтобы хранить информацию в локальном хранилище браузеров.

пример:

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

localStorage.getItem("test2") 

дополнительно информацию о локальном хранилище: cookies vs local storage

4 часа моего времени выход к этому, не делают ту же ошибку.