2013-08-27 107 views
2

我想要在HTML5本地存儲中存儲JavaScript對象。在HTML5本地存儲中存儲JavaScript對象

sessionStorage.setItem("localObj",this); 

我在函數中使用了上述語句。該對象包含HTML標記。 我既不能將其轉換爲字符串,也不能將其轉換爲JSON。 我該如何處理?

+1

>'我既不能將其轉換爲一個字符串,也不到JSON'。爲什麼?你可以將一個'HTMLElement'(及其子項)轉換爲一個字符串,並在需要時將其轉換回來。 – fardjad

+0

你收到錯誤「將圓形結構轉換爲JSON」,因爲當你製作你的dom元素的json結構時,它會創建循環依賴。就像你在你的dom中有一個名爲'parentNode','parentElement','offsetParent'等的屬性,它們有你的dom元素作爲他們的孩子。所以它創建循環依賴和json不能序列化,因爲只有。 – Sudarshan

回答

7

你必須首先將對象轉換成JSON,然後在本地存儲存儲。而當你想重用存儲的數據時,你必須將json字符串反序列化爲javascript對象,並且它會正常工作。

Working Sample

function setValue() { 
    var obj = new user(); 
    var jsonObject = JSON.stringify(obj); 
    sessionStorage.setItem("Gupta", jsonObject); 
    getValue(); 
} 

function user() { 
    this.Name = "rahul"; 
    this.Age = 20;  
} 

function getValue() { 
    var json_string = sessionStorage.getItem("Gupta"); 
    var obj = JSON.parse(json_string) 
    alert("Name = "+obj.Name + ", Age = " + obj.Age); 
} 
1

本地存儲將只存儲字符串。如果你不能對你的對象進行字符串表示,那麼你不能存儲它。

0

本地存儲設計時考慮了字符串/值對,所以您將很難嘗試按原樣存儲對象。你要麼需要「串」它,要麼你需要看別的東西。這個早期問題的答案應該幫助:

Storing Objects in HTML5 localStorage

+0

javascript對象包含HTML,如下所示 如果我使用JSON.stringfy(obj),則會出現錯誤:將圓形結構轉換爲JSON –

+0

瞭解。一種方法是在Javascript對象中實現自己的'toJSON()'函數。這可以根據需要處理其中的HTML實體。只要'stringify'遇到你的對象,它就會按照你的對象實現'toJSON()'。 – Ben

+0

您收到錯誤'將圓形結構轉換爲JSON',因爲當您製作dom元素的json結構時,它會創建循環依賴關係。就像你在你的dom中有一個名爲'parentNode','parentElement','offsetParent'等的屬性,它們有你的dom元素作爲他們的孩子。所以它創建循環依賴和json不能序列化,因爲只有。 – Sudarshan