php传分页信息给js的核心是服务端渲染时以json嵌入html,推荐data-属性(简单安全)、全局对象(结构复杂时)、meta标签(seo友好),须防xss并校验数据类型。

PHP 把分页信息传给 JS,核心思路是:**在 PHP 渲染页面时,把分页所需的数据(如当前页、总页数、每页条数、URL 模板等)以 JSON 格式嵌入 HTML,再由 JS 安全读取**。不推荐用内联 script 拼接变量,也不建议让 JS 再发一次请求去拿分页元数据(除非是纯 AJAX 分页)。
1. 用 data- 属性挂载分页参数
最简单、语义清晰、兼容性好。适合服务端渲染的分页(比如列表页首次加载)。
- PHP 中输出 HTML 时,在某个容器(如
<div id="pagination-data">)上添加多个 <code>data-*属性 - JS 用
dataset或getAttribute读取,自动转为字符串,必要时parseInt或JSON.parse - PHP 用
json_encode()生成合法 JSON 字符串 - 包裹在
<script></script>标签中,赋值给一个命名空间对象(如window.PAGINATION) - JS 直接访问该对象,无需解析
- PHP 输出
<meta name="pagination" content='{"page":3,"total":12} '> - JS 查找 meta 标签,用
JSON.parse解析其content - 注意:content 值必须是合法 JSON 字符串,且已转义
- 所有动态插入到 HTML/JS 中的用户数据(如 URL、搜索词)必须用
htmlspecialchars()或json_encode(..., JSON_HEX_...)处理 - JS 端读取后,检查字段是否存在、类型是否正确(例如
typeof data.page === 'number'),避免undefined导致报错 - 不要直接
eval()或拼接字符串构造 JS 代码 - 如果分页逻辑后续完全由 JS 控制(如无限滚动或前端分页),可只传原始数据数组,不传分页元信息
示例(PHP):
data-total-pages="= (int)$totalPages ?>"
data-per-page="= (int)$limit ?>"
data-base-url="= htmlspecialchars($baseUrl, ENT_QUOTES) ?>">
JS 获取:
const el = document.getElementById('pagination-data');const currentPage = parseInt(el.dataset.currentPage);
const totalPages = parseInt(el.dataset.totalPages);
const baseUrl = el.dataset.baseUrl; // 如 '/api/posts?page={page}'
2. 输出一个全局 JS 对象(轻量级)
适合参数稍多、结构稍复杂(比如带排序字段、搜索关键词)的场景。注意避免 XSS,必须对内容做 JSON 编码和 HTML 转义。
PHP 示例:
JS 使用:
console.log(PAGINATION.page); // 3console.log(PAGINATION.urlTemplate); // '/list.php?page=%d'
3. 用 meta 标签存结构化数据
更语义化,不干扰 DOM 结构,适合 SEO 友好型页面。但需手动解析 JSON 字符串。
PHP:
JS:
const meta = document.querySelector('meta[name="pagination"]');if (meta) {
const data = JSON.parse(meta.getAttribute('content'));
console.log(data.page);
}
4. 注意安全与健壮性
无论哪种方式,都要防范 XSS 和运行时错误:











