2011-06-28 42 views
5

Esto es lo que estoy haciendo,cómo trabajar con json feed almacenado en localStorage en la aplicación phonegap?

Obtenga una solicitud en mi servidor web, la respuesta está en json. Usar plantillas de jquery para representar los datos de devolución de llamada en mi aplicación. Bastante sencillo, funciona como un encanto.

Este es el problema: quiero almacenar algunos de estos datos localmente para que mi aplicación no tenga que buscarla en el servidor cada vez (3g es lento y cada transacción daña mi UX ...). Así que aquí está lo que he intentado:

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

    ... 

Esto falla. (Me di cuenta que el código es tonto, simplemente para facilitar la depuración hasta que consigo que funcione)

Si hago un simple

alert(foo); 

después de agarrar los datos almacenados localmente que veo algo así como

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

si lo hago

alert(foo[0]) 

me sale

'[' 

si lo hago

alert(foo[0].name); 

me sale

'undefined' 

lo tanto, mi mejor conjetura es que esto es causado por el formato de datos Cómo cambió de JSON a través de la cadena cuando se almacena localStorage. ¿Estarías de acuerdo? Y, si es así, ¿qué puedo hacer para volver al formato json?

Gracias a ton!

Respuesta

11

Es necesario utilizar JSON así:

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

Y luego analizarlo:

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

Ahhh, fantástico. ¡Gracias una tonelada! – 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; 
})(); 

Ahora usted tiene una interfaz agradable para almacenamiento local,

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

muy bueno! ¡gracias! – istan

Cuestiones relacionadas