【问题标题】:localStorage is not updating edited informationlocalStorage 没有更新编辑的信息
【发布时间】:2016-12-13 13:30:21
【问题描述】:

我在编辑本地存储数据时遇到问题。我在本地存储中保存了 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; 
}

【问题讨论】:

  • 很可能是错字。向我们展示您如何保存、如何检索数据以及将 editInfo() 修复为当前格式不正确
  • 你确定你的代码运行到localStorage.setItem()吗?你的控制台有什么错误吗? pro 返回什么?
  • @lonut ,我在控制台中没有错误。其实我可以打印出本地存储内容
  • 也许你用localStorage.clear()清除了某处的本地存储?
  • 用代码更新你的问题并解释。不要将其添加为评论。

标签: javascript


【解决方案1】:

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

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));  
}

【讨论】:

  • 问题依旧
  • @user3262564 在让用户进行更改之前,您需要确保您的承诺 (bevInventory) 完成。因此,如果 editInfo 是按钮单击的回调,则在完成 bevInventory 之前使按钮不可单击。向其中添加控制台日志将有助于调试。
【解决方案2】:

如果 localStorage 中最初没有“完成”数据,您的代码将失败。 JSON.parse() 解析null(因为没有数据),然后在线出错

pro.length

所以最好检查一下是不是第一次上线,没有数据:

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

例如here

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

【讨论】:

  • 是的,它保存了编辑的信息,问题是当我刷新页面时本地存储变回原始数据
  • 您能否提供有关该问题的更多详细信息?我尝试了您的 Info() 代码,它运行良好,在 localStorage 中“完成”数据存储 - jsfiddle.net/ze5obkno/1
  • 我正在使用 html5 表单来获取用户的输入并更改本地存储的内容。当我插入输入并刷新页面时,本地存储发生了变化,并且编辑后的数据以表格格式显示,但是,如果我再次刷新页面,本地存储将恢复为原始数据。编辑不会永久更改本地存储数据。我希望数据永久更改而不是临时更改
  • 这是一个将用户输入读取和写入到 localStorage - jsfiddle.net/avadon/3o4mbg4v/13 的工作示例。它工作正常,这意味着您必须将每次写入记录到存储中,以便找到重置 localStorage 或写入损坏数据的行(这也会导致重置)。
  • 问题是刷新页面会覆盖本地存储。我正在从服务器读取文件并保存在本地存储中。时,页面刷新它向服务器发送请求并覆盖本地存储。我停用了该请求,它现在可以正常工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多