2011-11-21 175 views
0

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

在'结果'页面上,用户可以做出额外的选择来影响他们的结果(类似于比较网站)。任何更改将通过jquery查询后端数据库。

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

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

  • :易于实现
  • 精读:查询

选项2)重复
执行在后台查询,并通过传递页的背面的数量jquery/JSON以及结果页上的信息

  • :在同一个地方
  • 精读:这可能吗?将发送类似: {result_info: data_array, pages: page_array}

会是怎样来实现分页的结果页面的最佳选择?

+0

“后端”和“结果页面”有什么区别? –

+1

顺便说一句,有一个很酷的jQuery插件可以做到这一点,你应该看看http://datatables.net/ –

+1

解决方案可能是数据库特定的。你使用什么数据库引擎?通常最好在数据库中处理分页,大大减少数据被发回给用户并提供更好的性能。 – Chris

回答

0

最好的选择是设置PHP后端页面来执行两个查询。首先确定有多少个条目,然后选择一个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文档,我认为极限是什么会有所帮助。

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

在结果方面,您可以获取传递的$ count值,您可以将其除以每页所需的结果数,然后会告诉您有多少页。

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

+0

您可能想要将COUNT(*)更改为列名COUNT(id),但它是一个通用解决方案。 – Chris

+0

感谢您的帮助。该查询对我来说是已知的。这对我来说更是一个问题,与Jquery结合使用的最佳选择是什么。似乎是使用'后端'选项来计算页面的。你知道是否有可能通过建议的选项通过JSON/jQuery发送两个变量? – Ralf

+0

是的,您可以构建自己的JSON字符串并简单地回显它。 AJAX调用将接收从.php脚本输出的任何内容。这里有几个用于构建JSON代码的有用链接。 http://www.json.org/这是JSON标准并描述了什么是有效的。 http://jsonlint.com/这是一个JSON验证器。 – Chris

0

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

+0

没错,谢谢你的收获。 – Chris