Перезагрузка страницы после pjax

все! Я пытаюсь использовать jquery-pjax. У меня есть html-код с фрагментами:

<li id="left_menu_item"><a href="myurl">Caption</a></li>
...
<div class="right-block" id="content">
</div>

и js-код

$(document).pjax('a', '#content');

$(document).on('pjax:send', function() {
    console.log('pjax:send');
});
$(document).on('pjax:complete', function() {
    console.log('pjax:complete');
});
$(document).on('pjax:success', function() {
    console.log('pjax:success');
});
$(document).on('pjax:error', function() {
    console.log('pjax:error');
});
$(document).on('pjax:timeout', function() {
    console.log('pjax:timeout');
});

И я получаю сообщения «pjax: error» и «pjax: timeout». Ok. я добавил

$.pjax.defaults.timeout = false;

Теперь в консоли Javascript все в порядке: 'pjax:send' и 'pjax:complete'. Но после этого перезагрузите страницу! Почему?


person indapublic    schedule 12.02.2013    source источник
comment
Браузеры Chrome 24.0 и Firefox 17.0   -  person indapublic    schedule 12.02.2013
comment
В инструментах разработчика браузера вы должны иметь возможность настроить консоль так, чтобы она сохранялась даже после перезагрузки. Вы сделали это? И когда вы это сделаете, можете ли вы сказать, запускается ли обратный вызов ошибки?   -  person Ian Clelland    schedule 12.02.2013
comment
Да, я сделал это раньше. Сообщений об ошибке нет. pjax:send myscript.js:10 pjax:complete myscript.js:13 pjax:send myscript.js:10 pjax:complete myscript.js:13 Вот и все.   -  person indapublic    schedule 12.02.2013
comment
Вам нужно использовать опцию fragment?   -  person Sean Hogan    schedule 12.02.2013
comment
@SeanHogan Сейчас я им не пользуюсь.   -  person indapublic    schedule 13.02.2013
comment
Можете ли вы сохранить вкладку Net в консоли и опубликовать заголовки HTTP и текст ответа страниц с AJAX?   -  person Sean Hogan    schedule 13.02.2013
comment
@SeanHogan Я делаю демо и выкладываю на свой сайт indapublic.ru/pjax   -  person indapublic    schedule 13.02.2013


Ответы (1)


Когда jquery-pjax используется для постепенного улучшения статического HTML-сайта, вы должны использовать параметр fragment.

В вашем случае код будет примерно таким:

$(document).pjax('a', '#content', { fragment: '#content' });

Вы также должны убедиться, что ваш HTML действителен - jquery-pjax синтаксический анализ HTML не совсем такой, как в браузере.

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

<div id="content">
  <p>Page 1</p>
</div>
person Sean Hogan    schedule 13.02.2013
comment
Да, теперь работает корректно. Попробуйте использовать это в рабочем проекте. Спасибо большое. Один вопрос: есть ли альтернативы jquery-pjax? - person indapublic; 14.02.2013
comment
Частичная перезагрузка страницы. Какое лучшее решение для этого? Я использую поиск Google и нашел только jquery-pjax - person indapublic; 14.02.2013
comment
Я думаю, что актуальными альтернативами являются yui-pjax, djax, htmldecor. - person Sean Hogan; 14.02.2013
comment
Спасибо за ответ. Могу я задать еще один вопрос? Если у меня есть два div, хлебные крошки и контент, и я хочу изменить их отдельно (потому что между ними существуют фильтры div) - что я должен сделать? Я пытаюсь сделать два $.pjax.click, сначала с {push: false}. Но это не работает - пока я нажимаю кнопку «Назад», меняется только содержимое, хлебные крошки остаются прежними. - person indapublic; 14.02.2013
comment
OK. Последний ответ. Вызовите pjax только для контента. Подключайтесь к событиям pjax:success и pjax:popstate для управления хлебными крошками. - person Sean Hogan; 14.02.2013