2013-09-25 2 views
2

У меня есть интерфейс PHP/MySQL, который использует некоторые очень большие формы для сбора данных. Я сохраняю данные в базе данных через регулярные промежутки времени, используя пост JSON в фоновом режиме. Иногда пользователь теряет связь, но продолжает работать. Эти данные затем теряются, вызывая разочарование и т. Д.Плавный переход от онлайн к офлайне с клиентом PHP/MySQL?

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

Заранее спасибо.

+1

Вы можете проверить, успешно ли отправлена ​​последняя часть данных. Если нет, сохраните его в памяти и повторите попытку с последующим интервалом. –

+0

Посмотрите на ** [localStorage] (http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/) **. Вы можете реализовать это в случае ошибок ajax. – Archer

+0

Вы также должны изучить [PHP] (http://www.xphp.info/php-tutorial/long-polling/) [Long] (http://www.nolithius.com/game-development/comet-long -polling-with-php-and-jquery) [Опрос] (http://stackoverflow.com/questions/333664/simple-long-polling-example-code#answer-333884). Это поможет решить многие проблемы, если вы не хотите использовать что-то вроде [node.js] (http://nodejs.org/) – SpYk3HH

ответ

1

Возможно, вы попытаетесь использовать LocalStorage. Вы можете найти основную информацию о механизме. here

Простое использование будет следующим: 1. Когда пользователь открывает форму, вы проверяете, есть ли какие-либо данные в локальном хранилище (и если эти данные новее, чем тот, который пришел с сервера) - если это так, загрузите его. 2. Как-то раз js пытается отправить ajax-вызов с обновлением. При сбое (тайм-аут соединения и т. Д.) Js просто сохраняет данные локально (с отметкой времени) и пытается сохранить его позже.

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

Недостатком такого решения является то, что он не будет работать в старых браузерах, но если вам действительно нужно, вы можете преодолеть это, заменив LocalStorage на ... cookie. Это будет ужасно уродливо, но будет работать так, как вам нужно.

+1

Кроме того, он может использовать PHP Long Polling для определения статуса соединения и отправки возврата при утере соединения. Таким образом, предоставляя пользовательскому интерфейсу способ «рассказать пользователю», что соединение в настоящее время потеряно, или подготовить «локальное сохранение» из локального хранилища или что-то в этом роде. – SpYk3HH

+0

Это возможно, но я не думаю, что полезно использовать длинный пул в этой ситуации, потому что он довольно много стоит на стороне сервера, потому что apache должен поддерживать открытое соединение для каждого пользователя ... – Moby04

+0

Возможно.Но это была просто идея, подумал, что он, возможно, захочет расследовать вместе с вашим ответом. Там никогда не было правильного решения, только решение, которое наилучшим образом подходит для вас и ваших «клиентов» – SpYk3HH

Смежные вопросы