网站API数据存入sessionStorage后刷新页面无法复用问题求助
问题分析与修复方案
我帮你揪出了代码里的两个核心问题,分分钟就能搞定这个刷新后无法复用数据的bug!
问题根源
- 第二部分代码里,你只是定义了
workingresults函数,但完全没调用它——这就好比你把工具准备好了,却从来没启动它,自然不会触发APIresults执行 - 从
sessionStorage取出的数据是JSON字符串,直接传给APIresults的话,函数大概率期望的是JS对象,类型不匹配肯定没法正常工作
修正后的完整代码
if (sessionStorage.getItem("data") == null) { fetch('XXX') .then(function(resp) { return resp.json() }) .then(function(data) { APIresults(data); sessionStorage.setItem("data", JSON.stringify(data)) }) .catch(function(err) { console.error('API请求失败:', err); // 加上错误日志,方便调试排错 }); } else { // 1. 把存储的字符串转成JS对象 let storedData = JSON.parse(sessionStorage.getItem("data")); // 2. 直接调用目标函数,不用额外绕一层 APIresults(storedData); }
关键修改说明
- 移除多余函数定义:没必要额外写
workingresults,直接调用APIresults就行,多此一举的函数只会增加代码复杂度,还容易忘调用 - JSON.parse转换数据:
sessionStorage只能存字符串,存的时候用JSON.stringify转字符串,取出来必须用JSON.parse转回对象,保证传给APIresults的是正确类型 - 简化条件判断:前面已经判断过
data为null的情况,后面直接用else就行,逻辑更简洁清晰 - 添加错误日志:在
catch里打印错误信息,方便你排查API请求失败的场景
这样修改后,刷新页面时只要sessionStorage里有数据,就会自动把转换后的对象传给APIresults,完美复用存储的数据啦!
内容的提问来源于stack exchange,提问作者Gyld
相关产品推荐
相关产品推荐

