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中,这基本上就像一个哈希图/字典,因为项目存储在键值对中。

例如,要存储 astring localStorage你会做类似的事情

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

要检索值,您只需反转

var myValue = localStorage["myKey"];

接下来要意识到的是,您实际上只能将字符串存储在 localStorage 中,因此如果要存储对象,您需要首先将其转换为字符串表示形式。这通常通过将对象转换为JSON来完成,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 的支持,但一些较旧的浏览器不支持,如果这是一个问题,您可以包含 Douglass Crockfords JSON-js脚本来提供支持。

编辑:

根据您刚刚发布的屏幕截图,您可以看到在 localStorage 中存储值的键实际上是 simpleCart_items (而不是您的代码中使用的 your_json ),并且正在存储的对象有一个存储的对象在“SCI-1”键下)(可能还有“SCI's”下的其他键)。所以你需要做的是如下所示

 $("#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 回答