1

我正在编写一个 Safari 扩展,它使用 jQuery.ajax 为一些 XML 数据生成 XMLHttpRequest。如果我在流程数据函数中执行 console.log(data),我会得到一个可以遍历的项目 Document。

我想将此 ajax 数据存储在 localStorage 中。所以在 processDocument 函数的前几行我有这个:

function processResponse(data) {
    localStorage.removeItem("myData");
    localStorage.setItem("myData", data);
    console.log('post-load: there are ' + localStorage.length + ' items in the local storage array.');
    console.log("post-load data: " + data);
    console.log("post-load myData: " + localStorage.myData);

console.log 会显示:
post-load:本地存储阵列中有 1 项。
post-load data: [object Document]
post-load myData: [object Document]

所以看起来我这里有有效数据。但是 messageHandler 函数在响应工具栏上的按钮时也会像这样轮询本地存储:

console.log('There are ' + localStorage.length + ' items in the local storage array.');
for (var x = 0; x < localStorage.length; x++) {
    console.log(x + ": " + localStorage[x]);
}
if (localStorage.myData == undefined) {
    console.log("myData is undefined");
    doSomething();
} else {
    console.log("myData is defined");
    doSomethingElse();
}

此处的控制台日志会显示:
本地存储阵列中有 1 项。
0:未定义
myData 已定义

为了将此 XML 数据正确存储在 localStorage 中,我需要做些什么吗?localStorage 不应该保留这个对象的完整性吗?也许我在这里遗漏了一些东西。

4

1 回答 1

1

尽管您的初始调试输出似乎告诉您,本地存储不存储对象,它存储字符串。要取回 XML,您应该将其存储为字符串,然后在检索时将字符串解析回 XML。 这个答案描述了一种方法,您可能需要专门针对 XML 进行调整。

于 2011-02-03T18:09:03.877 回答