@S-a-n-d-r-0

Как лучше сохранять неотправленное сообщение?

Как реализовывать сохранение неотправленной формы на случай случайной перезагрузки страницы, или если пользователь (касается только авторизованных) зашел на страницу через пару дней, в т.ч. с другого браузера?
Пока вижу выход только в регулярной отправке, допустим, раз в 3 секунды ajax'ом текущих данных на форме с сохранением в БД. Можно снизить частоту отправки, добавив в js проверку, менялась ли форма, и не отправлять, если не менялась. Но тогда что делать, если пользователь откроет страницу с формой сразу в нескольких вкладках?
Есть варианты, как сделать это? Мб реальные примеры где такое реализовано?
  • Вопрос задан
  • 81 просмотр
Решения вопроса 2
DimaLondon
@DimaLondon
...на случай случайной перезагрузки страницы...

Это, конечно, очень странное поведение. Но лучше делать отправку Ajax на сервер при событии onblur из INPUT или TEXTAREA.

Сохранять желательно в сессию (если на короткий срок). При этом будет мало мусора. А если важен длительный срок и вам плевать на мусор и лишние килобайты ненужного кеша - то в файлы.

Как вариант для перфекционистов - в БД.
Столбцы ID (autoincrement) | user_id | form_name | form_data

Во всех вариантах массив значений всех полей оборачивайте в JSON (желательно) или сериализуйте.
Ответ написан
Комментировать
@SEOVirus
Если не хотите дёргать БД постоянно, можно поднять сервер (хоть на ноде) и через веб-сокеты периодической отправкой кидать данные серверу из JS. Сервер будет держать инфу в оперативке, периодически дампя её в БД. Если пользователь очистил форму вводу или отправил (хранить её больше не нужно) - он отправляет такую команду серверу, тот реагирует. Иначе, если длительное время пользователь не апдейтил ничего на сервер, то можно разово сделать запрос к БД проапдейтив инфу окончательно. Так и запросов будет мало, и нагрузка минимальная.
spoiler
Главное, чтобы сервер не упал :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы