Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как выполнить функцию перед закрытием/перезагрузкой страницы (https://javascript.ru/forum/events/55355-kak-vypolnit-funkciyu-pered-zakrytiem-perezagruzkojj-stranicy.html)

Ol'kO 24.04.2015 11:17

Как выполнить функцию перед закрытием/перезагрузкой страницы
 
Здравствуйте. Требуется по умолчанию сохранять в базе данных настройки пользователя, когда он закрывает или обновляет страницу. window.onbeforeunload и unload не срабатывают. То есть onbeforeunload срабатывает, если выводить предупредительное сообщение, а просто молча функцию не выполняет. Есть какие-нибудь методы осуществить желаемое?? Буду очень благодарна за советы.

hfts_rider 24.04.2015 11:48

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

kostyanet 24.04.2015 11:53

Тут нет логики в onbeforeunload и описанной задаче. Юзер останется на странице - и что? Значит не ушел, значит сохраняли в бд зря, он еще поменяет что-то и опять не получится сохранить.

Все, да, сохраняется по событиям, а не в конце как в екзеле.

Делается на самом деле проще. Без аякса-шмаякса через куки. Сохранили в куках - они на клиенте лежат. Перезагружаем страницу - идет запрос к серверу. Сервер берет те же самые куки, проверяет все и сохраняет в бд, затем из бд читает или кеширует что найдено в куках и согласно настроек отдает пагу.

Ol'kO 24.04.2015 11:57

Цитата:

Сообщение от hfts_rider
В таком случае при любом изменении нужно сохранять настройки вне зависимости от перезагрузки или ухода с сайта.

Такой вариант вряд ли подойдет, т.к. сохраняется расположение иконок, которые юзер может перемещать как ему нравится. Иконок много, и каждый раз отправлять ajax запросы на сервер при каждом перемещении как-то не хочется... По интервалу периодически сохранять тоже не подойдет, ведь человек может закрыть окно до того, как произошло очередное сохранение. Может возможно узнать, что пользователь шарит курсором где-то в меню браузера хотя бы:) и тогда произвести сохранение? Как это делается у нехороших сайтов, которые когда пытаешься их закрыть или уйти со страницы, выводят модальное сообщение при малейшем движении курсора.

kostyanet 24.04.2015 12:08

В смысле узнать где руки юзера? не зависли ли пальцы над комбинацией кнопок alt+f4, или вы уверены что нормальный человек никогда мыш из них не выпустит?

Вам дали правильный ответ. Чтобы не гонять аякс по каждому чиху, сохраняете все через json в куказ и все. Сервер сохавает перед выдачей паги в следующей сессии и все будет выглядеть как оставлено.

Ol'kO 24.04.2015 12:08

Цитата:

Сообщение от kostyanet
Делается на самом деле проще. Без аякса-шмаякса через куки. Сохранили в куках - они на клиенте лежат. Перезагружаем страницу - идет запрос к серверу. Сервер берет те же самые куки, проверяет все и сохраняет в бд, затем из бд читает или кеширует что найдено в куках и согласно настроек отдает пагу.

Что-то я про куки не совсем поняла. Если мы не перезагружаем страницу, а закрываем ее и сегодня уже не откроем? Завтра запустим приложение, а кук нет?

kostyanet 24.04.2015 12:10

Аборигены съедят?

Куда они денутся? По кукам деньги зарабатывают, а тут какие-то иконки, блин.

kostyanet 24.04.2015 12:11

Куки могут храниться до 9999 года. Этого достаточно? Ну вот.

Гоняйте аяксом запросы, не должно быть там проблем. Социал весь так работает. Ну или заведите кнопку или меню Сохранить настройки.

Ol'kO 24.04.2015 12:15

у куки же есть срок действия? к тому же их можно удалить, нажав на соответствующую кнопку в браузере

kostyanet 24.04.2015 12:17

Срок действия устанавливает разработчик, максимальный - 9999 год. Что касается удаления куков, то у ваших пользователей все равно нет столько извилин чтобы открыть настройки браузера. Но самая мякотка - как они потом залогиняться к вам на сайт удалив куки? Никто их не удаляет, не переживайте. О них даже никто не знает кроме нас с вами.


Часовой пояс GMT +3, время: 20:06.