история изменений pjax без фактического запроса/использования pjax без подключения к серверу

Я использую pjax и понимаю, как это работает. Я обрабатываю всю логику pjax с помощью JS, и в некоторых случаях я хочу «подделать» новую загрузку страницы без фактического получения pjax каких-либо данных.

Мой вопрос: как я могу установить новую запись в истории с pjax без фактического подключения pjax к серверу? В основном используйте pjax как обычно, но без подключения к серверу.

Я знаю, что это не фактическая цель или использование pjax, но я не хочу загружать history.js или что-то подобное только для этого моего небольшого исключения. Теоретически с этим должен справиться и pjax...


person MMachinegun    schedule 25.04.2014    source источник


Ответы (2)


Попробуйте просто использовать history.pushState(). history — это встроенная функция HTML5, позволяющая добавлять новую запись в историю без перезагрузки страницы. Поскольку вызов этой функции на самом деле не запускает событие popstate, pjax не должен выполняться.

person Sunjay Varma    schedule 27.04.2014
comment
спасибо за предложение. Я попробую и завтра отчитаюсь :) - person MMachinegun; 27.04.2014
comment
Конечно. Если это сработает, убедитесь, что вы принимаете любой ответ, который работает. - person Sunjay Varma; 27.04.2014
comment
До сих пор я понял большинство вещей. Ваш намек подтолкнул меня в правильном направлении, еще раз спасибо! В любом случае, я столкнулся с проблемой при использовании pjax и history.pushState по отдельности: у меня также есть function с pjax:popstate, поэтому, когда я использую history.pushState() по отдельности, функции не запускаются pjax:popstate. Так что было бы действительно полезно, если бы я мог использовать только pjax, как указано. - person MMachinegun; 30.04.2014
comment
Может сработать, если я также буду слушать history.popState() отдельно, так что я буду делать и то, и другое.. Буду пробовать :) - person MMachinegun; 30.04.2014
comment
Хорошо, получается, что я должен сделать это с pjax, так как он также обрабатывает кеширование, а при настройке вручную у меня такого не было бы. - person MMachinegun; 30.04.2014
comment
спасибо за ваш вклад, в конце концов я внимательно рассмотрел history.pushState. На самом деле это не решает мою проблему, но по пути я узнал кое-что новое. Получи награду ;) - person MMachinegun; 05.05.2014

Я рекомендую использовать history.replaceState(newUrl), в противном случае, если вы используете history.pushState(newUrl), вы также должны правильно обрабатывать событие "кнопка возврата". Также посмотрите, в каких браузерах это поддерживается http://caniuse.com/#search=pushstate. Также учтите, что в некоторых браузерах он не будет работать в полноэкранном режиме из соображений безопасности.

Я рекомендую написать свою собственную функцию, например:

var historyChangeState = function (newUrl) {
    history.replaceState(newUrl)
    // something else to manage
}

так что вы сможете настроить его в будущем.

person igorpavlov    schedule 04.05.2014
comment
Хотя я не буду использовать replaceState как таковой, мне нравится идея с функцией separat, обрабатывающей логику. В любом случае спасибо за ответ... - person MMachinegun; 04.05.2014