2011-06-28 17 views
5

Yaptığım şey şu:phonegap uygulamasında localStorage'da depolanan json feed'i ile nasıl çalışılır?

Web sunucusuna istekte bulun, yanıt json'dur. Uygulamamda bu geri arama verilerini oluşturmak için jquery şablonlarını kullanma. Oldukça basit, bir çekicilik gibi çalışır.

Sorun şu: Bu verilerden bazılarını yerel olarak saklamak istiyorum, böylece uygulama her seferinde sunucudan almak zorunda kalmıyor (3g yavaş ve her işlem UX'imi acıtıyor ...). Yani burada denediğim şey:

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

    ... 

Bu başarısız.

Ben

[object, Object],[object, Object],[object, Object],...,[object, Object] 
gibi bir şey görmek yerel olarak depolanan verileri kapma sonra basit

alert(foo); 

yaparsanız (Ben işe almak kadar kod sadece kolay hata ayıklama için, saçma fark)

i

alert(foo[0]) 

do i

alırsanız i

alert(foo[0].name); 

yaparsanız 10

'[' 

i Yani, en iyi tahmin bu localStorage aracılığıyla saklandığında veri biçimi dizesine json değiştirildi alma kaynaklanır olduğunu

'undefined' 

olsun. Kabul eder misin Ve eğer öyleyse, json formatına geri almak için ne yapabilirim?

Teşekkürler bir ton! bunu ayrıştırmak sonra

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

Ve:

cevap

11

Öyle gibi JSON kullanmak gerekir

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

ahhh, fantastik. Teşekkürler bir ton! – 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; 
})(); 

Artık yerel depolama için güzel bir arayüze sahip,

var local = App.local; 
local.set('foo', 'bar'); 
var bar = local.get('foo'); 
console.log(bar); 
+0

çok güzel! teşekkür ederim! – istan

İlgili konular