Как сохранить / загрузить данные онлайн (хранить данные с помощью AJAX и JSON) и автономно (локально) - PullRequest
4 голосов
/ 22 февраля 2011

Мне нужна помощь в поиске лучшего кросс-браузерно-совместимого способа "СОХРАНИТЬ" пользовательский ввод и СОХРАНИТЬ его локально (автономный мод) И на сервере (онлайн).Программа будет использоваться Android и iOS.

Я хочу знать, как лучше всего отслеживать прогресс пользователя, когда устройство находится в сети ИЛИ в автономном режиме.

Здравствуйте. Я исследовал AJAX, JSON, XMLHttpRequest, REST, Java и HTML5 (в частности, localStorage).

Сценарий: (чтение книги онлайн / офлайн, сохранениеход страницы)

  1. Пользователь входит в веб-службу, и веб-служба позволяет пользователю загрузить «книгу веб-страниц html» (просмотр в браузере HTML5).

  2. После каждого перелистывания страниц REST API использует GET-запрос для публикации данных Progress на веб-сервере.Одновременно создается строка JSON и сохраняется в файле на сервере.(скажем, «ProgressData.txt»)

  3. В фоновом режиме отдельная «копия» файла ProgressData.txt ЛОКАЛЬНО сохраняется на мобильном устройстве.Затем пользователь покидает интернет-соединение и продолжает читать HTML-книгу.

  4. Когда пользователь восстанавливает соединение, файл ProgressData.txt загружается на сервер с помощью API REST, где он обновляетфайл старого сервера с файлом NEW .txt со всеми данными пользователя ProgressData.

Возможные решения:

Решение HTML5 localStorage выглядит хорошо.jQuery даже упрощает это: http://plugins.jquery.com/project/html5Storage

Прямой Javascript выглядит хорошо для хранилища на стороне сервера, однако у него нет доступа к физическому жесткому диску мобильного устройства, что предотвращает любые виды автономного сохранения.

Java-апплеты выглядят возможными.Плюс не уверен, как работает Java с Android / iOS.

Я не хочу запускать локальный хост (PHP / Apache / Python) с мобильного устройства каждый раз, когда пользователь отключается от сети, однако, возможно, именно в этом и заключается решение.Я наткнулся на этот мощный инструмент: http://couchdb.apache.org/

Вопрос:

Мне нужно знать, как лучше всего отслеживать прогресс пользователя, когда устройство находится в сети ИЛИ в автономном режиме.Каков наилучший способ сделать это?

Ответы [ 4 ]

3 голосов
/ 14 апреля 2011

Я наткнулся на store.js на днях, что может помочь решить кросс-браузерное локальное хранилище.Это была статья этой статьи о локальном хранилище.

Я думаю, что ваш лучший вариант для отслеживания онлайн / офлайн - это пинговать сервер с помощью вызова AJAX, когда страница переворачивается.Всегда пытайтесь обновить сервер при переворачивании страницы, но если он не работает, обработайте ошибку и сохраните ход выполнения локально.Каждый поворот страницы либо изменяет локально сохраненный файл прогресса, либо, если соединение восстанавливается, то просто обновляет сервер с прогрессом.

Я думаю, что проблема может возникнуть в том случае, если книга переведена в автономный режим, то больше нетщелчки, которые запускают синхронизацию, независимо от восстановленного соединения.Вы можете подумать о ссылке / кнопке ручной синхронизации в конце книги.Или, может быть, ручная синхронизация всегда доступна?Дайте некоторый контроль пользователям и опишите весь сценарий автономного / онлайн чтения.Вы можете обнаружить, что проще просто позволить пользователям выполнять работу ... если они не синхронизируются, то это их проблема!

0 голосов
/ 14 апреля 2011

Было бы целесообразно отслеживать прогресс как в базе данных на стороне сервера, так и в локальном хранилище клиента, если постоянное подключение к Интернету не требуется.

Evercookie - это спорный API-интерфейс javascript, целью которого является предоставление локального хранилища с использованием любых доступных средств, включая стандартные файлы cookie, общий объект Flash, Silverlight, историю браузера и хранилище HTML 5.Данные должны сохраняться, когда пользователь находится в автономном режиме и когда соединение восстанавливается, синхронизируйте файл cookie и базу данных с тем, какие данные имеют больший номер страницы для данной книги.У Droid есть Flash, а данные об общих объектах Flash - это «cookie», доступные как для настольных компьютеров, так и для веб-приложений.

С большой силой приходит большая ответственность: http://samy.pl/evercookie/

0 голосов
/ 09 апреля 2011

Вот 2 скринкаста, которые помогут вам решить вашу проблему.

Они в Ruby on Rails, но, возможно, вы поймете эту идею.Он использует манифест html5-кэша.

Надеюсь, он вам поможет!

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

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

еще несколько ресурсов (извините, яУ меня нет опыта работы с манифестом кэша html5)

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

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

0 голосов
/ 09 апреля 2011

Я бы посоветовал использовать куки для хранения текущего состояния.Таким образом, он автоматически отправляется на ваш сервер при каждом пользовательском запросе (поэтому нет необходимости создавать пользовательский API на стороне сервера для получения состояния после потери соединения, и нет необходимости иметь какой-либо пользовательский код на стороне клиента для отправки данныхна сервер), и все еще обновляемым, даже если пользователь потерял подключение к Интернету.Кроме того, он не зависит от функций HTML5, поэтому вам не нужно ограничивать людей браузерами с поддержкой HTML5.

В любом случае, лучший способ справиться с сохранением текущего состояния - это иметь простоеonclick обработчик вашей ссылки "следующая страница" (или кнопки, или чего бы то ни было), который вызывает функцию и устанавливает значение cookie для любой текущей позиции.Обратите внимание, что, поскольку состояние всегда доступно на стороне клиента и отправляется на сервер при каждом запросе, нет необходимости сохранять какие-либо явные копии на стороне сервера состояния, если только вы не захотите запомнить место пользователя, даже когдаони вручную удаляют свои куки (что, на мой взгляд, излишне).

Вы можете посмотреть Пример кода W3C для установки / получения значений куки в JavaScript.

Кроме того, вот веб-сайт , который демонстрирует функциональность, аналогичную той, которую вы хотите создать.Он использует куки для отслеживания места пользователя при чтении различных веб-комиксов.Примерно так же, как вы хотите, за исключением комиксов вместо книг.

...