【问题标题】:JSON.parse() from localStorage issue来自 localStorage 问题的 JSON.parse()
【发布时间】:2016-05-18 08:17:37
【问题描述】:

我目前正在开发一个小型浏览器游戏,我正在使用 HTML localStorage 来保存一些数据。

问题: 我有一个空数组,稍后我会将.push() 一些数据放入其中。我将此数组存储在 localStorage 中,但是当我尝试从本地存储中读取时,它不起作用。

Chrome 开发者工具控制台给了我这个错误: 尝试解析来自 localStorage 的数据时出现“Uncaught SyntaxError: Unexpected token u”。

这是我正在使用的代码:

var allContracts = [];
localStorage["allContracts"] = JSON.stringify(allContracts);

allContracts = JSON.parse(localStorage["allContracts"]);

还有比这更多的代码,但它们都没有以任何方式与这些交互。

localStorage 或 JSON 是否存在我不知道的怪癖并导致了这种情况? (我对 JSON 或 localStorage 不是很熟悉) 我应该以不同的方式这样做吗? 还是我只是错过了一个明显的错误?

提前致谢:)

【问题讨论】:

  • 适合我吗?
  • 我无法在最新的 chrome 上重现该问题,即使在您解析并再次写入后添加 push 后也是如此。
  • 也无法复制,您需要提供更多详细信息。
  • 我无法在 Firefox 或 Chrome 中重现您的问题。
  • @MarcosPérezGude 哎呀,尝试接受多个答案......是的......你可以告诉我这里是新人:P

标签: javascript arrays json html local-storage


【解决方案1】:

最好的方法是使用localStorage的接口为你服务的方法。它有setItem()getItem() 方法,为什么不用来保护自己呢?

var allContracts = [];
// setter
localStorage.setItem("allContracts",  JSON.stringify(allContracts));
//getter
var allContracts = JSON.parse(localStorage.getItem("allContracts"));

使用您的代码,您将使用自己的值覆盖 localStorage 全局对象,因此您失去了功能。

你做这个:

localStorage = [] // transform the default localstorage into an array

你需要这个:

localStorage.setItem(key, value)

更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

【讨论】:

  • 你重现了这个问题吗?
  • 这是一个正确的答案。你仔细阅读了我所有的帖子吗?你能告诉我们你有什么问题吗?
  • 你没有解释他为什么会得到这个错误。我试图重现该问题,但无法重现。
  • 你会注意到其他人也试图复制它。
  • 我解释了,但你不明白。我说:With your piece of code, you are overriding the localStorage global object with your own values, so you lost the functionality.
【解决方案2】:

我自己才刚刚开始使用 localStorqage,但看起来你应该使用 window.localStorage.setItem() 和 window.localStorage.getItem()

【讨论】:

    【解决方案3】:

    你应该使用

    localStorage.setItem('allContracts', JSON.stringify(allContracts));
    localStorage.getItem('allContracts');
    

    更多细节在这里: https://developer.mozilla.org/en-US/docs/Web/API/Storage

    【讨论】:

    • 您是否尝试重现该问题?
    • @gnerkus 答案很好,但他没有解释原因。问题是 OP 正在覆盖本地存储,因为他不使用这些方法。
    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 2011-07-22
    • 2014-07-06
    • 2014-07-06
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多