在sessionStorage中存储JSON数据的问题

时间:2017-05-16 10:20:37

标签: javascript json sessionstorage

我正在尝试利用HTML5 sessionStorage来保留以前从外部API检索到的一些数据,以便在以后再次调用数据时缓存数据,而不是建立连接以检索已经检索到的冗余数据会话。

std::vector

2 个答案:

答案 0 :(得分:0)

我认为这个问题与您在存储时JSON.stringify响应的事实有关。响应已经是一个字符串,因此它将进入"双字符串化"它,当你解析它时,你只会得到原来的字符串。

您在回复文字上同时执行JSON.stringifyJSON.parse。这对JSON没有意义,你应该只需要做其中一个。如果你对字符串进行字符串化,它将变为"双字符串"。如果您尝试解析对象,则会出现错误,因为JSON.parse需要一个字符串。

让我们说你的回复文字如下:

'{"property":"value"}'

这是一个字符串。现在,当你对它进行字符串化时,它将变为:

'"{\"property\":\"value\"}"'

当您解析此内容时,就像从sessionStorage获取它一样,您将只返回原始字符串。你必须再次解析它以获得你想要的对象。

当你直接解析响应文本时,你正确得到了对象:

{
  property: "value"
}

因此,您需要做的是将响应文本存储在sessionStorage中,而不对其进行字符串化。

您还只在请求的状态更改处理程序中调用parseItemTooltip,因此在获取缓存项时永远不会调用它。查看完整代码,我可以看到您基本上完成了此函数中的所有操作,因此您需要在不执行请求时显式调用它。

答案 1 :(得分:0)

在我的代码中再唠叨了一个小时后,我终于弄明白了这个问题,这很简单,就像通常一样。

我的回答是颠倒这两行:

    getItemWithTooltip(item.id, div_ID);
    document.getElementById("id01").innerHTML = out;

对此:

    document.getElementById("id01").innerHTML = out;
    getItemWithTooltip(item.id, div_ID);

推理:它试图在div创建之前填写它。 以前没关系,因为它在等待远程服务器响应时填写, 但是现在数据缓存到sessionStorage中,它被检索得如此之快,以至于订单确实成了一个因素。 总是很好地注意进展的逻辑顺序。

感谢所有为此调试做出贡献的人。非常感谢和赞赏! 快速反应,友好的人民。为本网站上的第一个计时器做好准备。