javascript - 请问一个关于localStorage存储的问题?
迷茫
迷茫 2017-04-11 11:24:41
[JavaScript讨论组]

我的代码时这样的:

var storage = window.localStorage;
storage[showPeople] = xml_text;

存储的格式是这样:

我现在想只留一条数据,将其他数据存在Value里,以JSON方式存储。
类似这样:

aaa:   {"aaa":"","bbb":"","CCC":""}

我自己写了下,但是有问题,我还会动态添加一些数据,当页面刷新时,再添加数据时,会将之前的数据清空。

var storage = window.localStorage;
var  obj = {};
obj[showPeople] = xml_text
storage.oXML = JSON.stringify(obj);

插入的时候用+=不知道为什么value前面多了个undefined

storage.oXML += JSON.stringify(obj);


第三次修改:
还是有问题
目前代码是这样

var  obj = {};
oAbc.onclick = function(){
obj[showPeople] = xml_text;
    if(!!!storage.oXML){
        storage.oXML = "";
    }
storage.oXML += JSON.stringify(obj);  //保存xml
    };

但是连续添加数据时,数据成了这样:

{"loooo":"<xml xmlns=\"http://www.w3.org/1999/xhtml\">\n  <block type=\"variables_get\" id=\"7f.)[wz-vPpFPFoo?JBS\" x=\"151\" y=\"59\">\n    <field name=\"VAR\">loooo</field>\n  </block>\n</xml>"}{"qqqq":"<xml xmlns=\"http://www.w3.org/1999/xhtml\">\n  <block type=\"variables_get\" id=\"Hr;dw7?yjKcwvXgEw456\" x=\"218\" y=\"59\">\n    <field name=\"VAR\">qqqq</field>\n  </block>\n</xml>"}

两条数据分别用大括号包裹起来了,我需要的是一个大括号包裹住所有的数据。
然后我将代码改成这样的:

var  obj = {};
oAbc.onclick = function(){
if(storage.oXML) {
   storage.oXML = '';
}
if (!!!obj[showPeople]){
    obj[showPeople] = '';
};
obj[showPeople] += xml_text;
if(!!!storage.oXML){
   storage.oXML = "";
}
storage.oXML += JSON.stringify(obj);  //保存xml
};

但是不刷的时候是正常的,当页面刷新后,再次添加的时候,会将以前的数据给清空掉。
请问还有更好的办法吗?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
大家讲道理
var storage = window.localStorage;
var aaa = JSON.stringify(storage);//转换为字符串
window.localStorage.clear();//清空localStorage
window.localStorage.setItem("aaa", aaa);

//使用时
JSON.Parse(window.localStorage.getItem("aaa"));

补充:

截图2:(点击保存的时候)

迷茫
for (var i = 0; i < 3; i++) {
  var storage = window.localStorage;
  storage[i] = 123;
}

var obj = {}
var storage = window.localStorage;
for (var i = 0; i < 3; i++) {
  obj[i] = 123;
}
storage['obj'] = JSON.stringify(obj);

v2:
var storage = window.localStorage;
var obj = JSON.parse(storage.getItem(oXML)); //先获取已有的
obj[showPeople] = xml_text
storage.oXML = JSON.stringify(obj);

迷茫

你可以一个object拼好了,转成json字符串存进去

ringa_lee
storage[showPeople] = xml_text;

storage可以这么用的么?
我平时都是用setItemgetItem

你的意思是要汇总所有的key跟value吧?

var res = {},key;
var storage = window.localStorage;
//遍历所有storage的key
for(var i =0; i < storage.length; i++){
     key = storage.key(i);
     //每个key value都放到res去
     res[key] = storage.getItem(key);
}
//最后把res转成字符串存起来
storage.setItem('all', JSON.stringify(res));

API参考:https://developer.mozilla.org...

PHP中文网
// 保存
    window.localStorage.setItem("aaa", JSON.stringify({
        a: '',
        b: '',
    }))

    //读取
    var aaa = JSON.parse(window.localStorage.getItem("aaa"))
高洛峰

JSON.parse转json字符串为json对象
JSON.stringify转json对象为json字符串

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号