localStorage未更新已编辑的信息

时间:2016-12-13 13:30:22

标签: javascript

我在编辑本地存储数据时遇到问题。我在本地存储中保存了Array of Array-list,它可以正常工作或保存。但是,当我尝试编辑时,它只会暂时编辑,当我刷新页面时,编辑的数据会消失,并显示我保存的原始数据

function editinfo(){
    var name = document.getElementById("nameB").value; 
    var price = document.getElementById("priceB").value;
    var quant = document.getElementById("quantityB").value;
    var retrieved = window.localStorage.getItem("done");
    var pro = JSON.parse(retrieved);
    for (i = 0; i < pro.length; ++i){
         if(pro[i][0] === name){ 
            pro[i][1]=  price
            pro[i][2] = quant; 
         } else{
            console.log("There is no such data to edit"); 
         }
    }
    window.localStorage.setItem("done", JSON.stringify(pro));  
}

//我保存了有关本地存储的信息,我从服务器读取数据。 var bevInventory = $ .getJSON('http://pub.jamaica-inn.net/fpdb/api.php?username=jorass&password=jorass&action=inventory_get');

function Info(){
    var info = []; 
    bevInventory.done(function(result){
        for(i = 0; i < result.payload.length; ++i){
         if(result.payload[i].namn != ""){
         var makeList = [result.payload[i].namn, result.payload[i].price, result.payload[i].count];
         info.push(makeList);
         }
        }
        var xx =  window.localStorage.setItem("done", JSON.stringify(info)); 
    })

    return info; 
}

2 个答案:

答案 0 :(得分:0)

如果localStorage中最初没有“完成”数据,则代码将失败。 JSON.parse()解析null(因为没有数据)然后在行上发生错误

pro.length

因此,最好先检查一下它是否是第一次启动而且没有数据:

if (!pro) {
    pro = [];
}

示例here

首次执行editinfo()后,数据成功保存在localStorage中。

答案 1 :(得分:0)

一种解决方案是首先检查,如果数据不存在,则将数据添加到本地存储。喜欢这个

function editinfo() {
    var name = 'bob';
    var price = 1;
    var quant = 2; // loaded dynamically from page.

    if (window.localStorage.hasOwnProperty("done")) {
        var retrieved = window.localStorage.getItem("done");
        var pro = JSON.parse(retrieved);
        for(i = 0; i < pro.length; ++i){
            if(pro[i][0] === name){ 
               pro[i][1] =  price
               pro[i][2] = quant; 
            }
        }
    } else {
        pro = [[name, price, quant]];
    } 
    window.localStorage.setItem("done", JSON.stringify(pro));  
}