2011-05-22 37 views
4

我有一個簡單的數組,我試圖JSON編碼並設置爲一個cookie。我正在使用json2.js腳本來編碼爲JSON。我使用下面的代碼來設置Cookie:JSON編碼數組轉換爲字符串時保存爲cookie

jQuery(document).ready(function(){ 
    var ids = ['1', '2']; 
    JSON.stringify(ids); 
    setCookie(cookieName, ids, 1); 
}); 

function setCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

數組轉換成JSON後,並在控制檯登錄,我得到:

["1", "2"] 

這正是我所期望的。然後,我讀出用下面的函數

function getCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

餅乾當我讀出了cookie,並在控制檯中記錄它,我得到:

1,2 

這表明它是一個字符串,不再是一個JSON編碼的對象。我希望能夠將cookie設置爲JSON編碼對象,將其讀出並解析JSON對象,最後對數據執行操作。因此,我的問題是,如何將JSON編碼對象發送給Cookie,以便我可以在讀出時將其解析爲JSON?

一如既往的感謝!

回答

6

更改此:

JSON.stringify(ids); 
setCookie(cookieName, ids, 1); 

要這樣:

var str = JSON.stringify(ids); 
setCookie(cookieName, str, 1); 
+0

非常感謝!這就是爲什麼我問這些問題。經過一段時間後,我看不到像這樣的小問題。 – tollmanz 2011-05-22 19:34:39

2

我沒有看到你實際使用JSON字符串化的結果:

jQuery(document).ready(function(){ 
    var ids = ['1', '2']; 
    setCookie(cookieName, JSON.stringify(ids), 1); 
}); 

試試這個

+0

+1太謝謝你了!很明顯,呃?這很奇妙,我沒有理解。 – tollmanz 2011-05-22 19:35:21

2

Don T選用這些cookie的功能,它們是有缺陷的。 setCookie無法正確編碼名稱和值,並且getCookie因共用後綴的cookie而失敗(請參閱my answer to Javascript getCookie functions)。

對於setCookie我會用這樣的:

function setCookie(name, value, days) { 
    var expires = ""; 
    if (days > 0) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     expires = "; expires="+date.toGMTString(); 
    } 
    document.cookie = encodeURIComponent(name)+"="+encodeURIComponent(value)+expires+"; path=/"; 
} 
+0

感謝您的諮詢!我會給它一個旋風。 – tollmanz 2011-05-22 19:46:06

+0

我實現了這個功能;然而,因爲這樣做,當我嘗試使用'setCookie(name,「」, - 1)刪除cookie時,'它只刪除cookie的值,而不是完全刪除cookie。在將其更改爲您的功能之前,它將按預期工作。有什麼想法嗎?再次感謝! – tollmanz 2011-05-22 20:48:14

+0

我通過設置'var expires =「; expires = Thu,01-Jan-1970 00:00:01 GMT解決了這個問題;'' – tollmanz 2011-05-22 20:54:48