32

私はJavascriptで関数を持っています:

var a = [];
function SaveDataToLocalStorage(data)
{       
    var receiveddata = JSON.stringify(data);
    a.push(receiveddata);
    alert(a);

    localStorage.setItem('session', a);

}

data パラメータは JSON オブジェクトです。

しかし、ボタンをクリックするたびに、ローカルストレージのデータが上書きされます。

誰もこれを行う方法を知っていますか?

4

4 に答える 4

91

この情報を localStorage に適切に保存するには、いくつかの手順を実行する必要があります。ただし、コードに取り掛かる前に、localStorage (現時点では)は文字列以外のデータ型を保持できないことに注意してください。ストレージ用に配列をシリアル化し、それを解析して変更を加える必要があります。

ステップ 1:以下の最初のコード スニペットは、シリアル化された配列を localStorage変数

にまだ格納していない場合にのみ実行する必要があります。session
localStorage が適切に設定され、配列が格納されていることを確認するには、最初に次のコード スニペットを実行します。

var a = [];
a.push(JSON.parse(localStorage.getItem('session')));
localStorage.setItem('session', JSON.stringify(a));

上記のコードは、localStorage変数に配列をまだ格納していない場合にのみ、1 回だけ実行する必要があります。すでにこれを行っている場合は、ステップ 2 に進みます。session

ステップ2:

関数を次のように変更します。

function SaveDataToLocalStorage(data)
{
    var a = [];
    // Parse the serialized data back into an aray of objects
    a = JSON.parse(localStorage.getItem('session')) || [];
    // Push the new data (whether it be an object or anything else) onto the array
    a.push(data);
    // Alert the array value
    alert(a);  // Should be something like [Object array]
    // Re-serialize the array back into a string and store it in localStorage
    localStorage.setItem('session', JSON.stringify(a));
}

これで残りは処理されます。解析すると、オブジェクトの配列になります。

お役に立てれば。

于 2013-04-18T13:47:56.970 に答える
8

現時点では、localStorage に格納できるのは文字列値のみです。配列オブジェクトをシリアル化してから、localStorage に格納する必要があります。

例えば:

localStorage.setItem('session', a.join('|'));

また

localStorage.setItem('session', JSON.stringify(a));
于 2013-04-18T13:23:16.473 に答える
6

私が提案できることの 1 つは、ストレージ オブジェクトを拡張して、オブジェクトと配列を処理することです。

LocalStorage は文字列のみを処理できるため、これらのメソッドを使用してそれを実現できます

Storage.prototype.setObj = function(key, obj) {
    return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
    return JSON.parse(this.getItem(key))
}

それを使用すると、すべての値が設定時にjson文字列に変換され、取得時に解析されます

于 2016-02-25T10:58:28.460 に答える