Какие есть варианты для изменения строки запроса в URL и обновления истории браузера?
Можно ли как-то изменить URL-адрес или добавить дополнительную историю к "кнопке назад", не обновляя всю страницу?
Мое приложение основано на AJAX, и я хотел бы добавить некоторые "отмененные" события в историю, чтобы пользователь мог просто нанести ответный удар и сохранить старые значения.
Что сегодня возможно? Я слышал, что это может быть в HTML5, но я не проверял, что поддерживается в современных браузерах.
4 ответа
Я думаю, что вы можете использовать window.location.hash
отслеживать #part
страницы, в вашем случае, #state1
, #state2
и так далее.
window.location.hash = '#state' + (++ stateN)
установить иstateN = parseInt(window.location.hash.match(/\d+$/)[0])
Смотрите On - window.location.hash - Изменить? для получения более подробной информации о том, как обнаружить изменения хеша местоположения.
Можно использовать встроенный в диспетчер скриптов ASP.NET для обновления истории браузера. Полное руководство для этого находится здесь:
http://www.asp.net/aspnet-in-net-35-sp1/videos/introduction-to-aspnet-ajax-history
Вы можете использовать 301 перенаправление. Лично я бы использовал куки на стороне клиента или сеансы на вашем бэкэнде, чтобы хранить хлебные крошки. Хранение информации о состоянии в URL-адресе является плохой идеей для приложений AJAX, потому что люди могут вернуться к URL-адресу, на котором сторона сервера не в нужном состоянии для ответа.
Другой вариант - предоставить собственную кнопку "Назад", которая знает, на какую страницу вернуться.
Ответ на этот вопрос будет более или менее таким же, как мои ответы на эти вопросы:
Итак, два проекта, которые вы, вероятно, захотите посмотреть, которые объясняют весь процесс хеширования и используют его с ajax:
jQuery History (использование хэшей для управления состоянием ваших страниц и привязки к изменениям для обновления вашей страницы).
jQuery Ajaxy (расширение ajax для jQuery History, позволяющее создавать полноценные ajax-сайты, оставаясь при этом совершенно незаметным и изящно разлагаемым).