如何使用存储在phonegap app中localStorage的json feed?

时间:2011-06-28 19:14:02

标签: javascript jquery ajax json cordova

这就是我在做什么,

获取对我的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格式?

非常感谢!

2 个答案:

答案 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);