如何使用PJAX?(PJAX用PHP?)

use*_*430 11 php ajax jquery pjax pushstate

我试图让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>
Run Code Online (Sandbox Code Playgroud)

我只是使用他们在PJAX演示页面上使用的代码,但将他们使用的容器(#main)替换为我的站点的容器,这是section标签.控制台或页面上没有错误,但它也不起作用!在我使用之前

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

$('document').ready(function(){
   $('ul a').pjax('section')
});
Run Code Online (Sandbox Code Playgroud)

但是当我不使用其中任何一个并且只使用$('ul a').pjax('section')我在控制台中看到这个错误:

在jquery.pjax.js中没有找到没有pjax容器的部分(行:353)

我可以得到一些帮助吗?谢谢

Sea*_*gan 10

默认情况下,pjax期望在没有chrome的情况下传递新页面 - 这是一个HTML片段,将用作容器的innerHTML.

在您的示例中,容器将是<section>我认为的第一个标记.我不知道pjax是否保证它将使用匹配选择器的第一个元素 - 它可能只是替换每个匹配的元素.可能最好使用ID选择器,例如#main.

无论如何,听起来你并没有提供HTML片段,而只是整个页面.这几乎违背了pjax的目的,但可以通过在下载的内容中指定片段来支持它.几乎总是这将是一个选择器,匹配将被替换的容器.

因此,假设您使用容器,@id=main您可以调用pjax

$(function() { $("ul a").pjax("#main", { fragment: "#main" }); });
Run Code Online (Sandbox Code Playgroud)

确保在加载文档后调用pjax,否则容器查找将失败.

顺便说一句,切换到pushState辅助导航的一种更简单的方法是使用我的HTMLDecor项目.它需要您更改生成HTML页面的视角,但是一旦完成,您只需要将HTMLDecor.js脚本添加到页面中,并在适当时自动使用pushState - 无需配置.