0

我的商店使用 localStorage 来存储购物车。我已经使用这一行来检索值:

var kamat = window.localStorage.getItem("simpleCart_items"); alert(kamat);

这将检索类似:

{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Valkoinen hiilikuitu -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":4,"name":"Car Speaker -hajuste","color":"Sport Fresh"}}

由于我已将其存储为变量,因此我想稍后再使用它。

我想在最后的大括号之前添加这个(在变量 kamat 之后)

var toimituskulut = {"Toimitus":{"quantity":1,"id":"Toimituskulut","price":8,"name":"Toimituskulut"}};

我已经尝试过了,因为它需要在项目之间使用冒号:

var kamatjatoimituskulut = kamat + "," + toimituskulut;

但不会工作。如果可以,它会在最后一个大括号之后插入 toimituskulut 的内容。那么我需要做什么呢?

编辑

单击按钮时,我正在尝试对其进行编辑:

$("#posti").live('click', function() {
        $(".maksu").slideDown(600);
        $("#posti").attr("disabled" , "disabled");
        $("#matkahuolto").removeAttr("disabled");
        $("#posti").addClass( "selectedtoimitus" );
        $("#matkahuolto").removeClass( "selectedtoimitus" );
        $(".simpleCart_shipping").html(kamat);  
        var kamatObj = JSON.parse(localStorage["simpleCart_items"]);
        kamatObj['toimituskulut'] = toimituskulut;
        localStorage["simpleCart_items"] = JSON.stringify(kamatObj);


    });

但是不,它不会添加任何东西。

JSFIDDLE

因此,如果本地存储如下所示:

{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Valkoinen hiilikuitu -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":4,"name":"Car Speaker -hajuste","color":"Sport Fresh"}}

当我单击一个按钮时,我希望它看起来像这样

{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Valkoinen hiilikuitu -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":4,"name":"Car Speaker -hajuste","color":"Sport Fresh"},"Toimitus":{"quantity":1,"id":"Toimitus","price":5,"name":"Toimituskulut"}}

但是这样做var kamatjatoimituskulut = kamat + "," + toimituskulut; 只会输出类似的东西,对吧?

{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Valkoinen hiilikuitu -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":4,"name":"Car Speaker -hajuste","color":"Sport Fresh"}},"Toimitus":{"quantity":1,"id":"Toimitus","price":5,"name":"Toimituskulut"}
4

5 回答 5

1

如果您有两个包含 JSON 字符串的变量,如下所示:

var kamat = '{"SCI-1":{"quantity":1,"id":"SCI-1","price":20,"name":"Valkoinen hiilikuitu -teippi","size":"Tyhjä"},"SCI-3":{"quantity":1,"id":"SCI-3","price":4,"name":"Car Speaker -hajuste","color":"Sport Fresh"}}';

var toimituskulut = '{"Toimitus":{"quantity":1,"id":"Toimituskulut","price":8,"name":"Toimituskulut"}}';

您需要像这样将这些字符串解析为 json(我使用的是 jQuery):

var kamatJSON = $.parseJSON(kamat);
var toimitusJSON = $.parseJSON(toimituskulut);

然后像这样将它们加在一起:

$.extend(kamatJSON, toimitusJSON);

并且由于它是一个对象,因此如果您访问以下值,则顺序并不重要:

kamatJSON.Toimitus

小提琴;

于 2012-09-16T18:08:09.827 回答
0

您想要的是将属性添加到对象。

但是你拥有的是一个字符串,因为 localStorage 只存储字符串。它似乎存储为 JSON(这是最明显的解决方案)。

首先你需要恢复对象:

var kamatObj = JSON.parse(localStorage["simpleCart_items"]);

然后你可以添加一个属性:

kamatObj['toimituskulut'] = toimituskulut;

然后您可以再次将其序列化为字符串以将其放回 localStorage :

localStorage["simpleCart_items"] = JSON.stringify(kamatObj);
于 2012-09-16T17:44:47.013 回答
0
    Try This :
        $("#posti").live('click', function() {
                $(".maksu").slideDown(600);
                $("#posti").attr("disabled" , "disabled");
                $("#matkahuolto").removeAttr("disabled");
                $("#posti").addClass( "selectedtoimitus" );
                $("#matkahuolto").removeClass( "selectedtoimitus" );
                $(".simpleCart_shipping").html(kamat);  
                var kamatObj = JSON.parse(localStorage["simpleCart_items"]);
var resultObject =JSON.parse((kamatObj).concat(JSON.parse(toimituskulut));
 alert(resultobjcet); 
localStorage["simpleCart_items"] = resultObject; 
            });
于 2012-09-16T18:09:51.190 回答
0

如果您尝试在本地存储中向对象添加内容(当然是字符串化的),我为此目的编写了一个工具。它可以在本地存储中设置任何类型的值,并同样提取。它甚至可以存储嵌套在存储值深处的值。您可以在https://github.com/andresgallo/truStorage找到脚本/工具

于 2012-09-21T04:08:37.497 回答
0

您可能想查看localDataStorage。它透明地设置/获取数组、布尔值、日期、浮点数、整数、字符串和对象。它提供轻量级数据混淆(为了安全)并智能压缩字符串。该实用程序允许您按键(名称)或(键)值或数据类型查询,检查重复值,并支持写保护键的概念。注意:我是该实用程序的作者。

于 2017-05-17T01:31:13.590 回答