Ajax Загрузить всю страницу в истории 'onpopsate'

Я использую это для создания нового состояния:

//state 1
        history.pushState({ reload: true }, 'submodulo', '?submodulo=1');
//state2
        history.pushState({ reload: true }, 'submodulo', '?submodulo=2');
//state3
        history.pushState({ reload: true }, 'submodulo', '?submodulo=3');

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

window.onpopstate = function(event) {
          if (event.state !== null && event.state.reload) {

              location.reload(true);

            }               
    };

Но таким образом я потеряю штаты. Это как щелкнуть по совершенно новому URL-адресу. Он не соблюдает последовательность. Есть ли другой способ загрузить всю страницу, но с помощью ajax?


person Camilla    schedule 29.09.2014    source источник


Ответы (1)


Вам нужно запустить вызов ajax вместо перезагрузки страницы в событии popstate.

window.onpopstate = function(event) {
   if (event.state !== null && event.state.reload) {
              $.ajax({
                url: 'load-content.php',
                success: function( response ) {
                     $('#main-content').replaceWith( response );      
                  }
              });
   }               
};

В целевой файл PHP загрузите свой контент в зависимости от URL-адреса или заданных параметров и в случае успеха замените свой контент сгенерированным.

person TheFrozenOne    schedule 29.09.2014
comment
Штаты по-прежнему ошибаются. Не могу, например, оттолкнуть 2 раза. Первый работает нормально, а второй нет. Или оттолкнуться назад, а затем вперед. - person Camilla; 30.09.2014
comment
Вы получаете какие-либо ошибки или подсказки в своем ответе? Offtopic: Это заметили на нескольких веб-сайтах, использующих ajax для навигации. - person TheFrozenOne; 30.09.2014