0

我需要使用 javascript 和 localstorage 创建注册和登录页面,我对一些事情感到非常困惑。

假设所有需要保存的信息都是一个字符串,我希望在本地存储一个可以随时增长的这些字符串的数组,只要它没有被清除,它就会一直增长。稍后我需要能够解析该数组并将字符串与将在登录页面中输入的字符串进行比较。如何在本地存储中创建字符串数组并访问它?我尝试了以下方法:localstorage.token = JSON.stringify(token);但是每次有一个新令牌时它都会重新写入它。我读了一些帖子,但我仍然有点困惑。

谢谢你。

4

2 回答 2

1

好吧,在你的情况下,令牌是一个字符串,所以如果你对它进行字符串化,它的值会改变。

你不需要,所以只需:

localStorage.token = token;

您应该JSON.stringify仅用于对象类型:

var t = {a: 5, b: 'Tom'};

// set
localStorage.special = JSON.stringify(t);

// get
var u = JSON.parse(localStorage.special);
console.log(u.a); // 5
console.log(u.b); // 'Tom'

编辑:关于您的注册/登录过程:http: //jsfiddle.net/NAzZ5/

于 2013-05-17T21:58:07.623 回答
1

好的,尽管它的边缘仍然很粗糙,但这里有一些概念证明

HTML:

<form>
    <input name='abc' value='' />
    <input name='def' value='' />
    <input name='ghi' value='' />
    <button type="button">Save</button>
</form>

JS:

$(function() {
    var $form = $('form'),
        $saveBtn = $('button'),
        myForm = {}, 
        myFormJsoned = localStorage.getItem('myform');

    if (myFormJsoned) {
        try {
            myForm = JSON.parse(myFormJsoned);
            $.each(myForm, function(i, obj) {
              $form[0][obj.name].value = obj.value;
            });
        }
        catch(e) {
            localStorage.removeItem('myform');
        }
    }
    $saveBtn.click(function() {
        localStorage.setItem('myform', 
            JSON.stringify($form.serializeArray()));
    });
});

关键是,当单击此按钮时,表单将使用该帮助 jQuery 方法序列化为一个数组(当然,使用serialize会更加简单 - 如果unserialize可用的话)。然后将其 JSON 化并存储到 localStorage 的单个字段中。

当你加载页面时,过程是相反的:JSON被解析成对象数组(jQuery.serializeArray的结果),这个AoO被再次插入到一个表单中(使用方便$.each)。

你可能会问,这是什么概念?我的观点是,当然可以使用 localStorage,因为它是一个单字符串容器——比如 cookie。但话又说回来,我会考虑为每个字段使用单独的容器:

localStorage.setItem('myform_abc', $form[0].abc.value);
localStorage.setItem('myform_def', $form[0].def.value);
localStorage.setItem('myform_ghi', $form[0].ghi.value);
于 2013-05-17T22:19:21.777 回答