7

私は simplecartjs を使用してオンライン ストアを運営しています。次のようなローカル ストレージにデータを保存します。

{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Mattamusta -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":19,"name":"Mohawk .vaimennusmatto 48 x 39cm"},"SCI-5":{"quantity":2,"id":"SCI-5","price":8,"name":"Car Speaker -hajuste","color":"Green Tea"},"SCI-7":{"quantity":1,"id":"SCI-7","price":50,"name":"Asennuspaketti"},"SCI-9":{"quantity":1,"id":"SCI-9","price":30,"name":"Quartz-kalvot","color":"Yellow","size":"50cm x 30cm"},"SCI-11":{"quantity":1,"id":"SCI-11","price":30,"name":"Quartz-kalvot","color":"True Blue","size":"50cm x 30cm"}}

そして、閉じるにこの行を追加したいと思います。

"SCI-12":{"quantity":1,"id":"SCI-12","price":5,"name":"Toimituskulut"}

ただし、製品の量はユーザーに依存するため、SCI-12はアイテムの数に応じて成長する必要があります。

編集実際には、SCI-1を使用する必要はありません。アイテムの後にある限り、何でもかまいません。

EDIT2 これが私がしようとしていることです...しかし、運が悪い。

$("#matkahuolto").click(function(){
    var value_object = '"Toimituskulut":{"quantity":1,"id":"Toimituskulut","price":5,"name":"Toimituskulut"}';
    var json_object = JSON.parse(localStorage.your_json); // convert string to object

    json_object["simpleCart_items"] = value_object; // add value

    localStorage.your_json = JSON.stringify(json_object);  // store it again.

    });

    $("#posti").click(function(){
    var json_object = JSON.parse(localStorage.your_json); // convert string to object

    json_object["simpleCart_items"] = value_object; // add value

    localStorage.your_json = JSON.stringify(json_object);  // store it again.

    });

EDIT3 ローカルストレージのスクリーンショット。 ローカルストレージ

4

2 に答える 2

12

最初に理解する必要があるのは、アイテムがlocalStorageに格納される方法です。これは、アイテムがキーと値のペアで格納されるという点で、基本的にハッシュマップ/辞書に似ています。

たとえば、を保存するには、次のstring localStorageようなことを行います

localStorage["myKey"] = "some value";

値を取得するには、逆になります

var myValue = localStorage["myKey"];

次に気付くのは、実際にはlocalStorageに文字列しか格納できないため、オブジェクトを格納する場合は、最初にそれを文字列表現に変換する必要があるということです。これは通常、オブジェクトを文字列として表すために使用されるコンパクトな表記法であるJSONに変換することによって行われます。オブジェクトをJSONに変換するには、JSON.stringifyメソッドを使用し、アイテムを解析するには、JSON.parseメソッドを使用します

たとえば、オブジェクトをJSONに変換するには

var someObject = {id: 1, name: 'Test'};

var jsonSomeObject = JSON.stringify(someObject); 
// jsonSomeObject looks like "{"id":1,"name":"test"}"

そして、JSONからオブジェクトを読み取るには

someObject = JSON.parse(jsonSomeObject);

したがって、ここで、オブジェクトに適切なデータが含まれていると仮定すると、必要なのはオブジェクトであり、キーstringifyを使用して追加するだけです。localStorage

var jsonData = JSON.stringify({"SCI-12":{"quantity":1,"id":"SCI-12","price":5,"name":"Toimituskulut"}});

localStorage["aKey"] = jsonData;

後でこのデータにアクセスしたいとき(おそらくページに戻った後)

var mySCI = JSON.parse(localStorage["aKey"])

localStorageの特定のエントリを更新しようとしている場合は、それを読み込んでから上書きします。たとえば、

var mySCI = JSON.parse(localStorage["aKey"]);
mySCI.SCI-12.quantity = 2;
localStorage["aKey"] = JSON.stringify(mySCI);

ほとんどのブラウザーにはJSONのサポートが組み込まれていますが、一部の古いブラウザーにはサポートが組み込まれていないことに注意してください。これが問題である場合は、DouglassCrockfordsJSON -jsスクリプトを組み込んでサポートを提供できます。

編集:

投稿したスクリーンショットに基づいて、値がlocalStorageに保存されるキーは実際にはsimpleCart_items(コードで使用されているyour_jsonではない)であり、保存されているオブジェクトにはオブジェクトが保存されていることがわかりますキー「SCI-1)の下(そしておそらく「SCI」の下の他の人)あなたがする必要があるのは次のようなものです

 $("#matkahuolto").click(function(){
    var value_object = {quantity: 1, id: 1, name: "someName"} ; 
    var jsonObject = JSON.parse(localStorage["simpleCart_items"]);
    json_object["SCI_1"] = value_object; // add value

 localStorage["simpleCart_items"] = JSON.stringify(json_object);  // store it again.

});

$("#posti").click(function(){
 // convert string to object
 var json_object = JSON.parse(localStorage["simpleCart_items"]); 

json_object["SCI-1"] = value_object; // add value

 localStorage["simpleCart_items"] = JSON.stringify(json_object);  // store it again.

});
于 2012-09-13T20:33:07.550 に答える
3

LocalStorage は、すべてのデータをテキストの文字列として保存します。そのため、テキストの文字列に変換される前に変更するのが最も簡単です。

それ以外の場合は、json 文字列をオブジェクトにプルし、プロパティを追加し、文字列に変換して保存する必要があります。

サンプルコード

var json_object = JSON.parse(localStorage.your_json); // convert string to object
json_object[key] = value_object; // add value
localStorage.your_json = JSON.stringify(json_object);  // store it again.

ノート

これが indexedDB の目的です。
これは代用と考えたほうがいいかもしれません。

于 2012-09-13T18:17:53.643 に答える