这就是我在做什么,
获取对我的Web服务器的请求,响应在json中。使用jquery模板在我的应用程序中呈现该回调数据。很简单,就像一个魅力。
问题是:我想在本地存储一些这样的数据,这样我的应用程序就不必每次都从服务器上获取它(3g很慢,每次事务都会伤害我的UX ......)。所以这就是我的尝试:
$.ajax({
url: app_domain + '/pages/home.json',
type: 'get',
datatype: 'json',
data: { mobile: "1" },
async: true,
cache: false,
success: function(data) {
//store locally
localStorage.setItem('foo', data);
//grab from local store
var bar = localStorage.getItem('foo');
// populate template with data
$.tmpl("cityTemplate", bar).appendTo('#all');
...
这失败了。 (我意识到代码很愚蠢,只是为了方便调试,直到我开始工作)
如果我做一个简单的
alert(foo);
抓取本地存储的数据后,我看到类似
的内容[object, Object],[object, Object],[object, Object],...,[object, Object]
如果我这样做
alert(foo[0])
我得到了
'['
如果我这样做
alert(foo[0].name);
我得到了
'undefined'
所以,我最好的猜测是这是由于数据格式在通过localStorage存储时从json更改为字符串引起的。你同意吗?而且,如果是这样,我该怎么做才能让它恢复到json格式?
非常感谢!
答案 0 :(得分:11)
你需要像这样使用JSON:
localStorage.setItem('foo', JSON.stringify(data));
然后解析它:
JSON.parse(localStorage.getItem('foo'))
答案 1 :(得分:4)
App.local = (function () {
var self = {};
self.get = function (key) {
var b = localStorage.getItem(key);
return b ? JSON.parse(b) : null;
}
self.set = function (key, value) {
var b = JSON.stringify(value);
localStorage.setItem(key, b);
}
return self;
})();
现在你有一个很好的本地存储接口,
var local = App.local;
local.set('foo', 'bar');
var bar = local.get('foo');
console.log(bar);