【问题标题】:Practical way to paginate data with ajax使用ajax对数据进行分页的实用方法
【发布时间】:2025-12-19 16:55:06
【问题描述】:
我有一个文件index.php,它的工作方式如下:
- 连接数据库,取表,将结果存储到存储对象的对象中(成员变量对应字段名)。所以我会将所有查询到的数据存储在
DataList 类的对象中。
- 我有一个
DataListPaginator,它实现了Iterator 接口,我用这种方式进行分页:$p= new DataListPaginator($d,1,10); 其中$d 属于DataList 类,1 是页码,10 是每个项目要显示的页面。
- 在底部我有一些实际分页脚本的页码,这是一个 ajax 解决方案,编码为
loadPaginator.js 和 paginator_ajax.php,后者由 ajax 调用。
在paginator_ajax.php 文件中,我有以下内容:
- 再次包含类
- 再次建立数据库连接
- 再次获取数据
- 再次生成视图
- 更新页码
我的问题是,如果我已经将结果查询并存储在 index.php 某处的变量中,我怎么能设法简化这个 php 脚本而不是一遍又一遍地查询数据库。
【问题讨论】:
标签:
php
jquery
ajax
pagination
【解决方案1】:
试图实现这一点,你正在失去分页的好处之一。
连接数据库,获取表,将结果存储在对象中
存储对象(成员变量对应于字段名称)。所以我
将所有查询的数据存储在 DataList 类的对象中。
当这个表有 10,000 条记录时会发生什么?分页的要点之一是只检索一个小的数字,比如 10、25 或 50,以保持数据库查询的快速。否则你会失去效率和速度。
您应该停止尝试以这种方式实现它,因为它没有意义,如果与 not 不同,则对服务器的请求时间 + 获得低于 100 的分页结果集将可以忽略不计完全查询数据库。前提是您有一个带有索引的优化查询。
您应该对结果集进行分页并将当前页面和使用的限制发送回客户端,允许他们增加页面计数以获得下一个结果集。
我建议您重新考虑这种提取整个表然后在 PHP 中处理它的策略,因为这是数据库的本意,而不是没有为此目的进行优化的事情。
【解决方案2】:
您可以使用 JQuery DataTables 对数据应用页面和排序。只需创建一个包含您的数据的
元素并将 DataTable 应用于您的 。某些设置将为您提供所需的功能。
注意事项:如果您要加载大量数据,DataTables 可能会变慢。有太多的列和/或太多的行会使一些浏览器爬行并可能锁定它们。此时最好在服务器端实现分页。
JQuery DataTables