2011-06-28 4 views
5

私がやっていることは次のとおりです。phonegapアプリケーションでlocalStorageに保存されている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' 

を得る10

'[' 

、私の最高の推測は、これはlocalStorageを介して、保存されたときに文字列にJSONから変更取得データ形式によって引き起こされています。同意しますか?もしそうなら、私はそれをjson形式に戻すために何ができるでしょうか?

ありがとうございます!

答えて

11

あなたがそうのようなJSONを使用する必要があります。その後、

localStorage.setItem('foo', JSON.stringify(data)); 

そしてそれを解析:

JSON.parse(localStorage.getItem('foo')) 
+0

ああ、素晴らしい。ありがとう、トン! – istan

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); 
+0

非常にいいです!ありがとうございました! – istan