2013-08-27 196 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