2011-06-28 40 views
5

這就是我在做什麼,如何在phonegap app中使用存儲在localStorage中的json feed?

獲取請求到我的web服務器,響應是在json。使用jQuery模板在我的應用程序中呈現回調數據。非常簡單,就像魅力一樣。

問題出在這裏:我想在本地存儲一些數據,這樣我的應用程序就不必每次都從服務器上獲取它(3g很慢,每筆交易都會傷害我的用戶體驗......)。所以這裏是我所嘗試的:

$.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'); 

    ... 

這失敗了。 (我知道的代碼是愚蠢的,只是爲了方便調試,直到我得到它的工作)

如果我抓住了本地存儲的數據我看到類似

[object, Object],[object, Object],[object, Object],...,[object, Object] 
後做一個簡單的

alert(foo); 

如果我做

alert(foo[0]) 

我得到

'[' 

,如果我做

alert(foo[0].name); 

我得到

'undefined' 

所以,我最好的猜測是,這是通過當通過的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

相關問題