pjax的工作原理是通过请求从服务器端获取HTML数据,然后将获取到的HTML数据替换指定容器元素中的内容。然后使用pushState技术更新浏览器地址栏中的当前地址。

2025-01-24T10:31:41.png

例如需要从页面1跳转到页面2,改造成pjax之后。

  1. 发起页1和目标页2,显示区域A和B设置同一个元素id
  2. 在页面1发起请求页面2内容,然后提取请求返回的页面2数据中的元素B,替换页面1的A区域
  3. 页面仅指定的同一个id的页面元素刷新,直接替换内容,不会跳转页面。

作用

好处就是页面局部刷新,加载会更快,并且页面没刷新,所以比如页面音乐播放,特效等比较连续,但是改造需要指定要替换的区域id,比较麻烦

开始

1、设置替换的元素id

正如上面示例图,需要设置发起页和目标页的替换id,大部分都是在首页index.php,文章列表的那个div为止,设置id="pjax-container",在文章post.php,文章显示区域的div,也设置id="pjax-container"

2、引入Jquery和PJAX

编辑footer.php或者header.php,引入js文件

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery.pjax/2.0.1/jquery.pjax.min.js"></script>

pjax1.9.6版本应配合Jquery2.x版本使用,如果要使用jq3.x版本,使用pjax2.0.1以上版本

3、引用加载动画(可选,更好看)

<link rel='stylesheet' href='https://unpkg.com/nprogress@0.2.0/nprogress.css'/>
<script src='//unpkg.com/nprogress@0.2.0/nprogress.js'></script>

4、加载pjax

在引入Jquery和PJAX代码下面,增加以下代码

<script>
//pjax 刷新
$(document).pjax('a[href^="<?php Helper::options()->siteUrl()?>"]:not(a[target="_blank"], a[no-pjax])', {
    container: '#pjax-container',
    fragment: '#pjax-container',
    timeout: 8000
}).on('pjax:send', function() {
        NProgress.start();//加载动画效果开始
}).on('pjax:complete', function() {
    NProgress.done();//加载动画效果结束
});

</script>

☟☟可点击下方广告支持一下☟☟

最后修改:2025 年 01 月 24 日
请我喝杯可乐,请随意打赏: ☞已打赏列表