Как использовать PJAX? (PJAX с PHP?)

Я пытался заставить PJAX работать с моим PHP-сайтом, это код, который я использую для него:

<script src="js/jquery.js"></script> 
<script src="js/jquery.pjax.js"></script>
    <script type="text/javascript">
        $(function(){
            // pjax
            $('ul a').pjax('section')
        })
    </script>

Я просто использую код, который они использовали на демонстрационной странице PJAX, но заменяя контейнер, который они использовали (#main), с тем, который был для моего сайта, который был тегом раздела. На консоли или на странице нет ошибок, но это тоже не работает! Прежде чем я использовал

$(function() { $('ul a').pjax('section') }); и

$('document').ready(function(){
   $('ul a').pjax('section')
});

Но когда я не использую ни один из них и просто использую $('ul a'). pjax ('section') Я вижу эту ошибку в консоли:

Невозможно открыть контейнер pjax для раздела в jquery.pjax.js(строка: 353)

Могу ли я помочь? Благодаря

Ответ 1

По умолчанию pjax ожидает, что новые страницы будут доставлены без chrome - фрагмента HTML, который будет использоваться как innerHTML контейнера.

В вашем примере контейнер будет первым тегом <section>, который я предполагаю. Я не знаю, гарантирует ли pjax, что он будет использовать первый элемент, соответствующий селектору, - он может просто заменить каждый соответствующий элемент. Вероятно, было бы лучше использовать селектор ID, например #main.

В любом случае, похоже, что вы не доставляли фрагменты HTML, а только целую страницу. Это почти побеждает цель pjax, но ее можно поддерживать, указав фрагмент в загруженном контенте. Почти всегда это будет селектор, который соответствует контейнеру, который будет заменен.

Итак, если вы используете контейнер с @id=main, вы можете вызвать pjax с помощью

$(function() { $("ul a").pjax("#main", { fragment: "#main" }); });

Убедитесь, что pjax вызывается после загрузки документа, иначе поиск контейнера завершится неудачно.

Кстати, более простой способ переключиться на pushState с помощью навигации - это проект HTMLDecor. Это требует, чтобы вы изменили свою перспективу при создании HTML-страниц, но как только вы это сделали, вам просто нужно добавить HTMLDecor.js script на свои страницы, а pushState будет использоваться автоматически, если это необходимо - не требуется настройка.