Преамбула для охвата моего вопроса:
У меня есть веб-приложение (или сайт, это сайт внутренней локальной сети), в котором широко используются jQuery и AJAX для динамической загрузки раздела содержимого пользовательского интерфейса в браузере. Пользователь перемещается по приложению с помощью меню навигации. При щелчке по элементу в меню навигации AJAX вызывает php, а затем php возвращает контент, который используется для заполнения центрального раздела контента.
Одна из страниц, обслуживаемых php, имеет форму таблицы, настроенную как электронная таблица, в которую пользователь вводит значения. Эта таблица всегда синхронизируется с данными в базе данных. Итак, когда таблица создана, она заполняется соответствующими данными базы данных. Затем, когда пользователь вносит изменение в «ячейку», это изменение немедленно записывается обратно в базу данных, поэтому таблица и база данных всегда синхронизируются. Этот подход состоял в том, чтобы заверить пользователей в том, что введенные ими данные были сохранены (длинная история ...), и избавить их от необходимости нажимать какую-либо кнопку сохранения.
Таким образом, это всегда хорошая идея для синхронизации, за исключением того, что пользователь может ввести значение в ячейку, не вынимать фокус из ячейки, а затем выполнить любое количество действий, которые могут привести к потере этого последнего значения: например перейти в другой раздел сайта через меню навигации, выйти из приложения, закрыть браузер и т. д.
Конец преамбулы, к вопросу:
Сначала я думал, что это не проблема, потому что я просто отслеживал, какие данные были "грязными" или не сохранены, а затем в событии onunload я выполнял окончательную запись в базу данных. В этом и заключается проблема: из-за моего умного (или не очень умного, не уверенного) использования AJAX и динамической загрузки раздела содержимого пользователь никогда не покидает исходный URL или страницу, когда выполняются вышеуказанные действия, за исключением закрытия браузера. Таким образом, событие onunload не запускается, и я снова теряю последние данные.
Мой вопрос, есть ли рекомендуемый способ выяснить, уходит ли человек из «раздела» вашего приложения, когда контент динамически загружается таким образом?
Я могу придумать решение, которое, я думаю, включает глобальные переменные и отслеживание просматриваемой в данный момент страницы, но я подумал, что смогу найти более элегантное решение или внести изменения в свой дизайн, это сделало бы эту работу.
Заранее спасибо как всегда!