我正在尝试利用HTML5 sessionStorage来保留以前从外部API检索到的一些数据,以便在以后再次调用数据时缓存数据,而不是建立连接以检索已经检索到的冗余数据会话。
std::vector
答案 0 :(得分:0)
我认为这个问题与您在存储时JSON.stringify
响应的事实有关。响应已经是一个字符串,因此它将进入"双字符串化"它,当你解析它时,你只会得到原来的字符串。
您在回复文字上同时执行JSON.stringify
和JSON.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中,它被检索得如此之快,以至于订单确实成了一个因素。 总是很好地注意进展的逻辑顺序。
感谢所有为此调试做出贡献的人。非常感谢和赞赏! 快速反应,友好的人民。为本网站上的第一个计时器做好准备。