Cómo save / cargar datos en línea (almacenar datos con AJAX y JSON) y sin connection (localmente)

Necesito ayuda para encontrar la mejor forma compatible con el browser cruzado para "GUARDAR" la input del usuario y GUARDARlos localmente (mod fuera de línea) Y en un server (en línea). El progtwig será utilizado por Android e iOS.

Quiero saber la mejor manera de seguir el progreso del usuario mientras el dispositivo está en línea O sin connection.

Hola, he estado investigando AJAX, JSON, XMLHttpRequest, REST, Java y HTML5 (específicamente, localStorage).

El escenario: (Leer un libro en línea / sin connection, save el progreso de la página)

  1. Un usuario inicia session en un Servicio web y el Servicio web le permite al usuario download un "libro de páginas web html" (ver con browser HTML5).

  2. Después de cada vuelta de página, una API REST utiliza una request GET para publicar los datos de progreso en un server web. Simultáneamente, se crea una cadena JSON y se guarda en un file en el server. (digamos "ProgressData.txt")

  3. En segundo plano, una "copy" separada de ProgressData.txt se guarda LOCALMENTE en el dispositivo mobile. El usuario abandona la connection a Internet y continúa leyendo el Libro HTML.

  4. Cuando el usuario recupera la conectividad, el file ProgressData.txt se carga en el server utilizando una API REST donde actualizará el file del server anterior con el file .txt NUEVO con todos los datos del usuario ProgressData.

Soluciones posibles:

La solución HTML5 localStorage se ve bien. jQuery incluso lo simplifica: http://plugins.jquery.com/project/html5Storage

El Javascript recto se ve bien para el almacenamiento en el lado del server, pero no tiene acceso al disco duro físico de un dispositivo mobile, lo que evita cualquier tipo de ahorro fuera de línea.

Los applets de Java parecen posibles. Además, no estoy seguro de cómo se ejecuta Java con Android / iOS.

No quiero tener que ejecutar un host local (PHP / Apache / Python) desde un dispositivo mobile cada vez que el usuario se desconecta, sin embargo, puede que sea donde esté la solución. Tropecé con esta poderosa herramienta: http://couchdb.apache.org/

Pregunta:

Necesito saber cuál es la mejor manera de seguir el progreso del usuario mientras el dispositivo está en línea O sin connection. ¿Cuál es la mejor manera de hacer esto?

Aquí hay 2 screencasts que lo ayudarán con su problema.

Están en Ruby on Rails pero tal vez puedas get la idea. Está utilizando el manifiesto de caching html5.

¡Espero que te ayude!

http://railscasts.com/episodes/247-offline-apps-part-1

http://railscasts.com/episodes/248-offline-apps-part-2

algunos más resources (lo siento, no tengo experiencias con el manifiesto de caching html5)

http://diveintohtml5.ep.io/offline.html

http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/OfflineApplicationCache/OfflineApplicationCache.html

Me encontré con store.js el otro día, lo que podría ayudar a resolver el almacenamiento local del browser cruzado. Fue a partir de este artículo sobre almacenamiento local.

Creo que tu mejor opción para rastrear en línea / fuera de línea es hacer ping al server a través de una llamada AJAX cuando se gira la página. Siempre pruebe y actualice el server en una vuelta de página, pero si falla, maneje la falla y guarde el progreso localmente. Cada vuelta de página enmendará el file de progreso almacenado localmente o si se restaura la connection, simplemente actualice el server con el progreso.

El problema que estoy pensando podría ocurrir es que si un libro termina fuera de línea, no habrá más clics que desencadenarían la synchronization, independientemente de una connection restaurada. Es posible que desee pensar en un enlace / button de synchronization manual al final de un libro. ¿O tal vez tener una synchronization manual disponible de todos modos? Déle un poco de control a los usuarios y describa todo el escenario de lectura fuera de línea / en línea. Puede encontrar que es más fácil dejar que los usuarios hagan el trabajo … ¡si no lo hacen, entonces es su problema!

Sugiero simplemente usar una cookie para almacenar el estado actual. De esta forma, se envía automáticamente a su server con todas las requestes de los usuarios (por lo que no es necesario crear una API del lado del server personalizada para recibir el estado después de una connection perdida, y no es necesario tener ningún código cliente personalizado para enviar los datos al server) y aún actualizable, incluso si el usuario ha perdido conectividad a Internet. Además, no depende de las funciones de HTML5, por lo que no es necesario restringir a las personas a browseres compatibles con HTML5.

En cualquier caso, la mejor manera de manejar el almacenamiento del estado actual sería tener un manejador de onclick simple en su enlace (o button, o lo que sea) de la "próxima página" que llame a una function y establezca el valor de la cookie en el valor actual la position es Tenga en count que dado que el estado siempre está disponible para el cliente y se envía al server en cada request, no es necesario mantener ninguna copy explícita del server del estado, a less que desee recordar el lugar del usuario incluso cuando eliminan manualmente sus cookies (lo cual es una exageración en mi opinión).

Es posible que desee ver el Código de ejemplo de W3C para establecer / get valores de cookies en JavaScript.

Además, aquí hay un website que muestra una funcionalidad similar a la que desea build. Utiliza cookies para realizar un seguimiento del lugar de un usuario al leer varias webcomics. Casi lo mismo que suena como quieras, excepto con cómics en lugar de libros.

Sería prudente rastrear el progreso en una database del lado del server y en el almacenamiento local del cliente si no es necesaria una connection a internet constante.

Evercookie es un api de JavaScript controvertido que tiene como objective proporcionar almacenamiento local utilizando cualquier medio disponible, incluidas cookies estándar, object compartido Flash, Silverlight, historial del browser y almacenamiento HTML 5. Los datos deben persistir cuando el usuario está fuera de línea y cuando se restaura la connection, sincronice la cookie y la database con los datos que tengan mayor número de página para el libro dado. Droid tiene Flash y los datos de objects compartidos de Flash son una "cookie" disponible tanto para aplicaciones basadas en escritorio como en la web.

Con gran poder viene una gran responsabilidad: http://samy.pl/evercookie/