我试图让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)替换为我的站点的容器,这是section标签。控制台或页面上没有错误,但它也不起作用!在我使用之前
$(function() {
$('ul a').pjax('section')
});
和
$('document').ready(function(){
$('ul a').pjax('section')
});
但是当我不使用其中任何一个并且只使用$('ul a')。pjax('section')我在控制台中看到这个错误:
在jquery.pjax.js中没有抓住pjax容器的部分(第353行)
我可以得到一些帮助吗? 感谢
答案 0 :(得分:10)
默认情况下,pjax期望在没有chrome的情况下传递新页面 - 这是一个HTML片段,将用作容器的innerHTML。
在您的示例中,容器将是我认为的第一个<section>
标记。我不知道pjax是否保证它将使用匹配选择器的第一个元素 - 它可能只是替换每个匹配元素。
可能最好使用ID选择器,例如#main
。
无论如何,听起来你并没有提供HTML片段,而只是整个页面。这几乎违背了pjax的目的,但可以通过在下载的内容中指定片段来支持它。几乎总是这将是一个选择器,匹配将被替换的容器。
因此,假设您使用带@id=main
的容器,可以使用
$(function() { $("ul a").pjax("#main", { fragment: "#main" }); });
确保在加载文档后调用pjax,否则容器查找将失败。
顺便说一句,切换到pushState辅助导航的更简单方法是使用我的HTMLDecor项目。它需要您更改生成HTML页面的视角,但是一旦完成,您只需要将HTMLDecor.js脚本添加到页面中,并在适当时自动使用pushState - 无需配置。