Есть ли рекомендуемый подход для обработки сохранения данных в ответ на внутрисайтовую навигацию без события onunload? - PullRequest
3 голосов
/ 14 мая 2010

Преамбула для охвата моего вопроса:

У меня есть веб-приложение (или сайт, это сайт внутренней локальной сети), в котором широко используются jQuery и AJAX для динамической загрузки раздела содержимого пользовательского интерфейса в браузере. Пользователь перемещается по приложению с помощью меню навигации. При щелчке по элементу в меню навигации AJAX вызывает php, а затем php возвращает контент, который используется для заполнения центрального раздела контента.

Одна из страниц, обслуживаемых php, имеет форму таблицы, настроенную как электронная таблица, в которую пользователь вводит значения. Эта таблица всегда синхронизируется с данными в базе данных. Итак, когда таблица создана, она заполняется соответствующими данными базы данных. Затем, когда пользователь вносит изменение в «ячейку», это изменение немедленно записывается обратно в базу данных, поэтому таблица и база данных всегда синхронизируются. Этот подход состоял в том, чтобы заверить пользователей в том, что введенные ими данные были сохранены (длинная история ...), и избавить их от необходимости нажимать какую-либо кнопку сохранения.

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

Конец преамбулы, к вопросу:

Сначала я думал, что это не проблема, потому что я просто отслеживал, какие данные были "грязными" или не сохранены, а затем в событии onunload я выполнял окончательную запись в базу данных. В этом и заключается проблема: из-за моего умного (или не очень умного, не уверенного) использования AJAX и динамической загрузки раздела содержимого пользователь никогда не покидает исходный URL или страницу, когда выполняются вышеуказанные действия, за исключением закрытия браузера. Таким образом, событие onunload не запускается, и я снова теряю последние данные.

Мой вопрос, есть ли рекомендуемый способ выяснить, уходит ли человек из «раздела» вашего приложения, когда контент динамически загружается таким образом?

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

Заранее спасибо как всегда!

Ответы [ 2 ]

1 голос
/ 20 мая 2010

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

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

Единственным исключением является то, что они обновляют страницу или закрывают браузер, но оба эти события приводят к событию onunload, что означает, что я могу связать свою функцию сохранения данных с этим событием и обработать эти случаи.

Так что все работает так, как я надеялся, и мое замешательство возникло из-за неправильного понимания того, когда произойдет событие изменения.

0 голосов
/ 14 мая 2010

AJAX обычно излишний для навигации по сайту. Если нет веских причин использовать AJAX, я бы просто заставил ваше навигационное меню использовать старые добрые ссылки вместо вызовов AJAX.

AJAX используется, чтобы держать пользователя погруженным в приложение, не видя мерцания и т. Д. Полного обновления страницы. Однако, если они планируют перейти на другую страницу, ожидается полное обновление страницы (и, следовательно, желательно).

...