拾光记录
218个文档 导航 作者 Gitee
随笔记录4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端知识4
基础知识17
Vue框架19
UniApp14
微信小程序1
Java编程6
Java基础15
SpringBoot31
SpringMVC18
MyBatis9
SpringCloud15
中间件2
数据库4
MySQL13
Redis8
MongoDB10
其他数据库1
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv管理工具
Linux12
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:NiriArchLinux:模块记录
软件工具12
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaRustFSPicGoVSCodeDocker
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

概念

PJAX(PushState + AJAX)是一种结合了 AJAX 和 HTML5 的 pushState API 的技术,用于实现无刷新页面切换,同时能更新浏览器的 URL 和历史记录。它能让网站拥有类似单页应用(SPA)的流畅体验,但又保持了多页应用(MPA)的简单结构。

注意事项:

使用原生pjax.js

第一步:引入

<script src="https://unpkg.com/pjax@0.2.8/pjax.min.js"></script>

第二步:使用

<!-- PJAX 链接 -->
<a href="/about" data-pjax>关于我们</a>
<a href="/contact" data-pjax>联系我们</a>


<script>
var pjax = new Pjax({
    elements: 'a[data-pjax]',           // 触发链接
    selectors: [
        "title",                        // 提取目标页面的 <title> 标签内容,并用它来更新当前页面的标题(document.title)
        "#pjax-container"               // 提取目标页面中 #pjax-container 元素内的 HTML 内容,并用它替换当前页面中 #pjax-container 的内容
    ], // 需要更新的 DOM 元素
    cacheBust: false, // 关闭自动添加 ?t=时间戳
});

// 当你通过 AJAX 加载完目标页面后,应该从返回的 HTML 中提取哪些部分,来更新当前页面的对应元素

// 事件监听
document.addEventListener('pjax:send', function() {
    console.log('发送请求');
});

document.addEventListener('pjax:complete', function() {
    console.log('加载完成');
});
</script>

常见的 selectors 配置

selectors: [
    "title",                    // 更新页面标题
    "#header",                  // 更新头部
    "#content",                 // 更新主要内容区
    "#sidebar",                 // 更新侧边栏
    "meta[name='description']", // 更新描述(对SEO有帮助)
    "body"                      // 有时也需要更新 body 的 class 等
]
概念使用原生pjax.js