2011-06-28 11 views
5

Oto, co robię,jak pracować z kanałem json zapisanym w localStorage w aplikacji phonegap?

Uzyskaj żądanie na mój serwer sieciowy, odpowiedź jest w json. Używanie szablonów jquery do renderowania danych wywołania zwrotnego w mojej aplikacji. Całkiem proste, działa jak urok.

Oto problem: chcę przechowywać niektóre z tych danych lokalnie, aby moja aplikacja nie musiała pobierać jej z serwera za każdym razem (3g jest wolne i każda transakcja rani moje UX ...). Oto, co próbowałem:

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

    ... 

Nie można tego zrobić. (Zdaję sobie sprawę, że kod jest głupie, tylko dla łatwego debugowania, dopóki nie zmusić go do pracy)

Gdybym zrobić prosty

alert(foo); 

po chwytając lokalnie przechowywane dane widzę coś takiego

[object, Object],[object, Object],[object, Object],...,[object, Object] 

jeśli zrobić

alert(foo[0]) 

ja dostać

'[' 

jeśli zrobić

alert(foo[0].name); 

ja dostać

'undefined' 

Tak, mój najlepszy przypuszczenie to jest to spowodowane przez format danych coraz zmieniło od json ciąg przy przechowywaniu przez localStorage. Zgodziłbyś się? A jeśli tak, co mogę zrobić, aby przywrócić go do formatu json?

Dziękuję za tonę!

Odpowiedz

11

Trzeba użyć JSON tak:

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

A następnie zanalizować go:

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

ahhh, fantastycznie. Dzięki za 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; 
})(); 

Teraz masz ładny interfejs do pamięci lokalnej,

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

bardzo ładne! Dziękuję Ci! – istan