【问题标题】:Pagination and jQuery [closed]分页和 jQuery [关闭]
【发布时间】:2012-01-03 02:24:00
【问题描述】:

人们通过他们提交的表单进入结果页面。通过 Jquery,从数据库中获取信息并呈现给用户。

在“结果”页面上,用户可以进行其他选择,这些选择会影响他们的结果(类似于比较网站)。任何更改都将通过 jquery 查询后端的数据库。

现在我想在结果页面中添加一个分页。在我的选择中,我有两个选择(如果我错过了选项,请纠正我),但我不确定哪一个是最好的选择。 这两个选项都将通过 jquery 将当前页面(或所选页面)提交到后端,以确保我们选择正确的结果。

选项 1)
在结果页面上执行与后端相同的查询,以定义所需的页面数。

  • 专业版:易于实施
  • 缺点:查询重复

选项 2)
在后端执行查询,并通过 jquery/JSON 将页面的数量与结果页面上的信息一起传递回来

  • 专业版:集中在一处
  • 骗局:有可能吗?将发送如下内容: {result_info: data_array, pages: page_array}

对结果页实施分页的最佳选择是什么?

【问题讨论】:

  • “后端”和“结果页”有什么区别?
  • 顺便说一句,有一个很酷的 jQuery 插件可以做所有这些,你应该看看datatables.net
  • 解决方案可能是特定于数据库的。你用的是什么数据库引擎?通常最好在数据库中处理分页,从而大大减少发送回用户的数据并提供更好的性能。
  • @Col.Shrapnel,结果页面是用户的可视页面,后端页面包含所有PHP编码和数据库查询。
  • @Chris,我使用 mysql 作为数据库。我的主要原因是减少信息传输并使整个解决方案更快。

标签: php jquery mysql pagination


【解决方案1】:

最好的选择是设置 PHP 后端页面来执行两个查询。首先是一个 COUNT 来确定有多少条目,然后是一个 SELECT ... LIMIT 来一次拉取一个页面。

所以基本的后端查询可能如下所示:

$page = $_GET['page'];
$page = intval($page); //Clean the input
$pageSize = 10; //get 10 results per page

$sql = "SELECT COUNT(*) as count FROM tbl_name";
$resultCount = mysql_query($sql);

$count = mysql_fetch_assoc($resultCount);
$count = $count['count'];

//Build your query, including LIMIT
$sql = "SELECT * FROM tbl_name LIMIT " . $page * $pageSize . ", " . $pageSize;
$results = mysql_query($sql);

//process $results and append the $count value to the JSON returned

如果您查看有关 SELECT http://dev.mysql.com/doc/refman/5.0/en/select.html 的 MySql 文档,我认为 LIMIT 会有所帮助。

减少从数据库返回的记录数将提供最佳性能。特别是如果数据库托管在网络上。

在结果方面,您可以获取传递的 $count 值,您可以将其除以您想要的每页结果数,这将告诉您有多少页。

然后您的 jQuery AJAX 调用可以请求 backend.php?page=2 例如。

【讨论】:

  • 您可能希望将 COUNT(*) 更改为列名 COUNT(id),但这是一种通用解决方案。
  • 感谢您的帮助。我知道这个查询。对我来说,与 Jquery 结合使用的最佳选择是什么,这更像是一个问题。似乎是使用“后端”选项来计算页面的。您知道是否可以通过建议的选项通过 JSON/jquery 发回两个变量?
  • 是的,您可以构建自己的 JSON 字符串并简单地回显它。 AJAX 调用将接收从 .php 脚本输出的任何内容。下面是一些用于构建 JSON 代码的有用链接。 json.org 这是 JSON 标准,描述了什么是有效的。 jsonlint.com 这是一个 JSON 验证器。
【解决方案2】:

您不应该将未经过滤的 GET 参数放入 sql 查询。这使得 sql 注入成为可能。您应该在 $page 上至少创建一个 intval()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多