Можно ли сохранить (без перезагрузки) состояние страницы AJAX при нажатии кнопки НАЗАД? - PullRequest
2 голосов
/ 29 августа 2008

Я знаком с несколькими подходами к тому, как заставить кнопки «Назад» работать в приложениях AJAX в различных ситуациях, но я не нашел решения, которое будет корректно работать в моем конкретном сценарии.

Страницы, с которыми я работаю, являются интерфейсом поиска для сайта. Вы вводите термины в обычном окне поиска, нажимаете «перейти и перейти на страницу результатов поиска». На странице результатов поиска имеется множество элементов управления пользовательским интерфейсом для фильтрации / сортировки результатов поиска, чтобы найти то, что вы ищете. Некоторые из Операции, запускаемые этими элементами управления, могут занять (относительно) длительное время (например, несколько секунд).

Эта задержка хороша в том случае, когда пользователь изначально фильтрует / сортирует свои результаты ... есть хороший счетчик AJAX и так далее ... однако, когда пользователь нажимает на результат поиска, а затем нажимает кнопку НАЗАД, Я бы хотел, чтобы страница была мгновенно восстановлена ​​до того состояния, в котором она находилась при нажатии.

Я могу восстановить состояния, используя IFRAMEs / идентификаторы фрагментов в качестве словаря истории страниц, но в конечном итоге происходит следующее: когда пользователь впервые нажимает кнопку «Назад», загружается начальная страница, а затем он (повторно) выполняет запрос AJAX. чтобы вернуть состояние страницы, что вызывает вращение AJAX и еще одно возможное ожидание в течение нескольких секунд.

Существует ли какой-либо подход, который не требует такой двухэтапной загрузки страницы, когда пользователь возвращается на страницу с помощью кнопки НАЗАД?

Отредактировано, чтобы добавить: я неравнодушен к jquery, но я был бы рад решениям, которые зависят от других библиотек / наборов инструментов или которые являются автономными / raw javascript.

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

Редактировать: Мэтт, можете ли вы уточнить предлагаемое решение (запуск события изменения страницы с помощью идентификатора фрагмента)? Я вижу, как это поможет при нажатии кнопки НАЗАД на той же странице, но не на НАЗАД на страницу результатов поиска после нажатия на конкретный результат.

Ответы [ 6 ]

1 голос
/ 28 ноября 2008
1 голос
/ 29 августа 2008

Просто используйте cookie .

0 голосов
/ 19 апреля 2012

Попробуйте использовать localStorage объект. Вот перекрестные библиотеки jStorage и WEBSHIMS json-storage

0 голосов
/ 07 ноября 2008

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

Вы можете создать случайный токен и присвоить его идентификатору фрагмента.

  • при загрузке первой страницы создайте токен, если не установлен идентификатор фрагмента
  • перед выходом из системы сохраните все временные данные ajax в cookie-файле с этим токеном в качестве индекса.
  • при ответном ударе, если у вас установлен идентификатор фрагмента, загрузите данные из соответствующего токена в cookie.
  • Вы даже можете добавить поле "время" для истечения срока действия токенов и т. Д. *

образец файла cookie (JSON):

{"ajaxcache":[{"token":<token>,"time":<time>,"data":<data>}, ... ]}
0 голосов
/ 29 августа 2008

Используйте что-то постоянное, привязанное к профилю пользователя.

Файлы cookie и сеансы - это хорошие идеи, но вы также можете хранить их в базе данных. Это дает вам дополнительное преимущество, заключающееся в том, что вы можете сохранять настройки фильтрации пользователя в разных сеансах просмотра (например, если он что-то искал в офисе, а затем решил продолжить поиск, вернувшись домой).

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

0 голосов
/ 29 августа 2008

Поможет ли это вызвать событие изменения страницы, используя «Добавить некоторую информацию к # в конце подхода URL».

Таким образом, нажатие кнопки «назад» на самом деле не должно изменить страницу, и вы сможете восстановить состояние без загрузки первой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...