我目前正在开发一个项目,我必须从localStorage加载一个数组,然后通过它循环来生成元素。
我的保存过程按预期工作,但是当它归结为加载它时 - 我收到以下错误。
TypeError: undefined is not a function (evaluating 'mainInfo.forEach')
您可以在下面看到引发此错误的代码。
var mainInfo = [];
var subInfo = [];
mainInfo = localStorage.StaffAppMainList;
subInfo = localStorage.StaffAppSubList;
finalOutput = "";
console.log(mainInfo.length);
mainInfo.forEach(function(item) {
var theTitle = item.title;
var url = "Pages/SubInfo.html?info=" + theTitle;
finalOutput = finalOutput + "<li><a href='" + url + "'>" + item.title + "</a></li>";
$("#homeList").html(finalOutput).listview().listview("refresh");
});
引发错误的行是 -
mainInfo.forEach(function(item) {
目前我不确定导致此错误的原因,因此我们将非常感谢任何建议。
答案 0 :(得分:4)
Local storage (aka Web Storage)仅存储字符串。如果要保留数组,可以在存储之前对其进行JSON编码,并在检索时对其进行解码。
// storing
var mainInfo = [];
localStorage.setItem("StaffAppMainList", JSON.stringify(mainInfo));
// retrieving
mainInfo = JSON.parse(localStorage.StaffAppMainList);
如果您尝试存储任何不是字符串的内容,则会存储空字符串,因此错误是因为字符串不具有forEach
方法。
答案 1 :(得分:1)
这是因为typeof mainInfo === 'string'
。 localStorage存储字符串。你需要以某种方式解析它。例如,如果mainInfo被序列化为JSON。您需要JSON.parse(mainInfo).forEach(..)