Обновить URL-адрес при вызове AJAX?

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

Я думал об использовании плагина jQuery Addresss для решения этой проблемы, но мне не нравится как он только изменяет URL-адрес с помощью "# something.html" вместо того, чтобы изменять его полностью.

В идеале я бы хотел, чтобы URL-адрес менялся с «www.example.com/p:2/» на «www.example.com/p:3/», когда я выполняю соответствующий вызов AJAX.

Это вообще возможно?


person Community    schedule 15.07.2009    source источник
comment
Я не верю, что вы можете полностью изменить текущий URL-адрес без принудительной перезагрузки страницы (по крайней мере, не так надежно, как в разных браузерах). Хотя я мог ошибаться.   -  person brettkelly    schedule 16.07.2009
comment
Я не совсем уверен, что вы хотите сделать ... вы хотите сохранить параметры страницы, чтобы вы могли сохранить состояние страницы с помощью навигации?   -  person flesh    schedule 16.07.2009


Ответы (5)


Нет, это невозможно. Обновление: теперь это возможно через API истории HTML5 - см. ответ Разбакова.

Надеюсь, вы понимаете, что пытаетесь решить чрезвычайно сложную проблему.

Допустим, ваш URL выглядит так

http://example.com/mypage/

Если программно изменить расположение окна на

http://example/mypage/1/

Браузер возьмет на себя управление и попытается перейти на эту страницу, вот и ваш модный код ajax!

Так какая альтернатива? Вы используете фрагмент URL.

Допустим, у вас есть такой URL,

http://example.com/anotherpage/#section

Браузер сначала загрузит http://example.com/anotherpage/ и попытается найти привязку с именем 'section 'и прокрутите до этого места. Это поведение используется подключаемым модулем «Адреса». Это похоже на то, как работают ссылки «Прокрутить вверх».

Итак, если вы находитесь на странице

http://example.com/mypage/

и измените URL-адрес на

http://example.com/mypage/#1

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

Даже если вам удалось добавить фрагменты в URL-адрес, это не значит, что работа сделана. Если пользователь нажмет кнопку «Назад», DOM будет сброшен, и вам придется проанализировать эти фрагменты и воссоздать DOM. Это определенно нетривиально.

person SolutionYogi    schedule 15.07.2009

Это возможно с HTML5. Вы можете протестировать в качестве примера сайт GitHub или Вконтакте.

Лучший ответ здесь: Изменить URL-адрес в браузере без загрузки новой страницы с помощью JavaScript

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

person Aleksey Razbakov    schedule 25.01.2011

Решить эту проблему можно с помощью history.js. https://github.com/browserstate/history.js

person v4r    schedule 13.07.2012

pjax прекрасно справляется с этим в современном браузере.

person duckegg    schedule 19.10.2012

После вызова AJAX мы можем обновить URL-адрес клиента с помощью history.pushState. Пожалуйста, найдите приведенный ниже синтаксис и пример

Синтаксис: history.pushState (obj, obj.Title, obj.Url);

Пример:

var url = "http://example.com/mypage/" + "newParameter=newValue"
history.pushState(undefined, '', url);
person Syed Shahjahan    schedule 26.12.2016