В моем приложении несколько страниц. На некоторых страницах я дал кнопку «Назад», на других страницах ее нет (требование клиента). Теперь на определенной странице у меня есть список вариантов (варианты — это слайды изображений с использованием плагина jQuery), которые должен выбрать пользователь. Выбор варианта переводит пользователя на следующую страницу. И теперь я хочу получить ту же страницу с тем же выбранным выбором, который был выделен при нажатии кнопки «Назад» в браузере. При нажатии кнопки «Назад» в браузере я предполагаю, что страница перезагружается, теряя значения файлов cookie, т.е. когда я выбираю изображение из своего набора изображений, оно переносит меня на другую страницу. Нажав кнопку «Назад» в браузере, я хотел получить эту страницу с тем же изображением, выбранным из этого набора. Есть ли какой-либо обходной путь, чтобы я мог вернуть выбранные значения также в браузере.
Получение выбора пользователя при нажатии кнопки «Назад» в браузере
Ответы:
Другой плагин делает это:
jQuery BBQ использует событие hashchange HTML5, чтобы обеспечить простую, но мощную историю #hash с закладками. Кроме того, jQuery BBQ предоставляет полный метод .deparam(), а также управление состоянием хэша, а также служебные методы анализа и слияния строк фрагментов/запросов.
http://benalman.com/projects/jquery-bbq-plugin/
Вы можете использовать событие onunload
, которое сработает почти во всех основных браузерах* при нажатии кнопки «назад/вперед/обновить». Пусть обработчик событий onunload
синхронно отправит AJAX-запрос, содержащий все значения, необходимые для восстановления текущего состояния страницы, PHP-скрипту:
$(window).unload(function() {
// Insert your code here to collect all values
// necessary to save a restorable state of the
// current page.
//
// var pageState = {
// page: host.pathname,
// :
// };
$.ajax({
type: "POST",
async: false,
url: "http://mydomain.com/mysave.php",
data: jQuery.param(pageState),
error: function(jqXHR, textStatus, errorThrown){
// your code
}
success: function(data, textStatus, jqXHR){
// your code
}
});
});
Пусть PHP-скрипт сохранит полученное состояние страницы где-нибудь (например, сеанс, база данных и т. д.), чтобы оно было доступно, когда вы собираетесь сгенерировать страницу, которую хотите восстановить до предыдущего состояния.
Имейте в виду, что у этого решения есть возможный недостаток.
Синхронный запрос используется, чтобы дать серверу реальный шанс получить и полностью обработать запрос. Асинхронный запрос вернется немедленно, таким образом уже загрузив новую страницу и возможно отменив асинхронный запрос, выполняющийся параллельно, до того, как он будет завершен (или даже отправлен).
Блокировка синхронных запросов Otoh (замораживание браузера, пользователь не может ничего сделать) до тех пор, пока сервер не ответит. Если ваш сервер не отвечает, это приведет к взаимоблокировке. К сожалению, нет способа отменить синхронный запрос на стороне клиента (по крайней мере, я не знаю), поэтому вы всегда должны делать синхронные запросы как можно короче (время обработки на стороне сервера). И убедиться, что у вас есть быстрый и надежный сервер, но он всегда должен быть у вас в любом случае^^.
*Однако имейте в виду, что некоторые браузеры (например, Opera) не запускают событие onunload
при использовании определенной кнопки браузера.