【发布时间】:2011-12-03 23:23:03
【问题描述】:
我正在使用带有这段代码的各种浏览器尝试 localStorage 和 JSON:
function getStorage() {
stored = JSON.parse(localStorage['test']);
if (typeof stored == 'object') {return stored;}
}
Chrome 给我以下错误消息:"Uncaught SyntaxError: Unexpected token u" 函数主体内的第一行。对于同一行,Safari 显示 “SyntaxError: Unable to parse JSON string”。 Firefox 不会为该行提供任何错误消息。
其他 JSON.parse 示例(来自书籍等)在 Safari 和 Chrome 中都可以正常工作。例如,Nicholas Zakas 的“Pro JavaScript”中的这个:
var jsonText = "{\"name\":\"Nicholas C. Zakas\", \"age\":29, \"author\":true }";
var object = JSON.parse(jsonText);
alert(object.name); //"Nicholas C. Zakas"
让它工作完全没有问题。本地存储也适用于两者。
我还使用file -I my file 检查了我所有文件的编码,并且所有文件,包括我自己的和上述书中的文件,都被编码为filename.html: text/html; charset=us-ascii - 所以编码似乎不是问题在这里。
这很令人困惑。非常感谢您的帮助。
/詹姆斯
【问题讨论】:
-
您在本地存储中存储的数据是什么?似乎不符合json。
-
我们能看到你试图解析的json字符串吗?
-
当然,这是 JSON 字符串:
if (window.localStorage) { if (localStorage.length == 0) { json = {"test": ["foo", "bar"]} // json is a global variable window.localStorage.setItem("test", JSON.stringify(json)); } } -
您是否尝试使用 console.log(localStorage["test"]) 来检查存储的值?
-
问题解决了!感谢您直接调试 localStorage 内容的建议。该错误位于
if (localStorage.length == 0)行中。我在 localStorage 中有一些来自以前应用程序的其他数据,因此json没有设置为该条件内的任何内容。现在我使用if (!localStorage['test']) {//set json}。 Safari 和 Chrome 就这么多 - 在 Firefox 6.0.2 中,localStorage 因各种原因无法正常工作:stackoverflow.com/questions/7355324/…
标签: json google-chrome safari