С этот вопрос (Как получить URL запроса в запросе jQuery $ .get / ajax) Я обнаружил, что могу получить его с помощью this.url
.
Из MDC window.history Я нашел синтаксис и из MDC Управление историей браузера Я обнаружил, что могу получить текущее состояние с помощью history.state
(похоже, работать на Chrome, хотя) и обнаружил, что при вызове pushState
я могу отправить только 640 тыс. символов на stateObject
, иначе он вызывает исключение.
Мой текущий метод для успешных запросов ajax:
OnSuccess: function(html, status, xhr){
var requestedUrl = this.url.replace(/[&?]X-Requested-With=XMLHttpRequest/i, "");
// if the url is the same, replace the state
if (window.location.href == requestedUrl)
{
history.replaceState({html:html}, document.title, requestedUrl);
}
else
{
history.pushState({html:html}, document.title, requestedUrl);
}
},
Для базового теста я сохраняю весь результат на stateObject
, если он выдает исключение, я вместо этого установлю URL, чтобы иметь возможность сделать новый запрос.
Мое popstate
событие
$(window).bind("popstate", function (e) {
var state = e.originalEvent.state;
$("#body").html(state.html);
});
Он восстанавливает страницу, как это было раньше, мне не нужно делать новый запрос.