2012-04-04 2 views
11

Я пытался получить PJAX работать с моей PHP-сайта, это код, я использую для этого:Как использовать PJAX? (? 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') 
}); 

Но когда я не использую либо из тех, и просто использовать $ («уль а»). Pjax («раздел») Я вижу эту ошибку в консоль:

Uncaught нет pjax контейнер для секции в jquery.pjax.js (строка: 353)

Могу ли я получить некоторую помощь с этим?

+0

На вашей странице есть тег '

'? Возвращает ли ваш сервер содержимое без хром, когда отправляется заголовок 'X-PJAX' или параметр' _pjax'? Можете ли вы ссылаться на демонстрационный URL? –

+0

На самом деле я не смог загрузить материал PHP, но я пробовал то же самое с помощью простых простых файлов html, но все-таки одно и то же. Вы можете увидеть это здесь: http://sbtest.comoj.com – user1302430

+0

На этом тестовом сайте замените свой pjax-вызов на '$ (function() {$ ('ul a'). Pjax (" # main ", {фрагмент : "#main"});}); '. Или поместите вызов в нижней части страницы. –

ответ

10

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

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

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

Таким образом, предполагая, что вы используете контейнер с @id=main вы могли бы назвать pjax с

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

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

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

Смежные вопросы