11

我试图让 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)

我能得到一些帮助吗?谢谢

4

1 回答 1

10

默认情况下,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 脚本添加到你的页面中,并且在适当的时候会自动使用 pushState - 不需要配置。

于 2012-04-05T12:29:51.040 回答