我正在使用jQuery从MySQL数据库获取xml的结果。分页结果的最佳方法是什么?
现在我的脚本获取xml并将每个结果作为<li>
元素附加到<ul>
元素。
我猜这将与创建一个全局变量有关,该变量通过运行要移除的脚本的下一个/上一个页面按钮进行更改,然后重新附加正确的结果范围,但我不是真的肯定的。
答案 0 :(得分:1)
你不应该依赖于Javascript进行分页,而应该在服务器端进行分页。因此,例如,服务器可以返回类似<a href="results.php?entry=50">View next 50 results</a>
的“下一个”链接。该脚本将该变量设为50并返回50个下一个结果,然后该链接将返回results.php?entry=100
。你可以将它与Ajax集成,因此结果会在没有页面刷新的情况下返回,但是分页本身仍然会在后端完成。
答案 1 :(得分:0)
我会做这样的事情
var numRows = $table.find('tbody tr').length
var numPages = Math.ceil(numRows / numPerPage)
var $pager = $('</p><br>
<div class="pager"></div>
')
for (var page = 0 page < numPages page++) {
$('<span class="page-number">' + (page + 1) + '</span>')
.appendTo($pager).addClass('clickable')
}
$pager.insertBefore($table)
答案 2 :(得分:0)
There are a few plugins,但你走在正确的轨道上。当您执行删除/重新附加操作时,请执行$('#mydiv')。load('/ path / to / myfile.php')。将文件传递给起始点和停止点,这些点将作为数组中从中获取数据的点。
function paginate(start, limit) {
// Maybe show a preloader?
$('#loader').show();
$("#mydiv").load("/path/to/myfile.php", {start: start, end: limit}, function(){
// hide preloader or do other code here
$('#loader').hide();
});
}
答案 3 :(得分:0)
您是一次性获得整个结果集(所有页面),还是一次获得一页?在任何情况下,您都应该保留从服务器收到的数据的本地缓存,并在用户导航页面时使用该缓存。例如,如果您一次检索一个页面,并且用户从第1页转到第2页,则需要从服务器检索第2页。但是如果用户现在返回到第1页,那么您应该从缓存中加载它。如果用户转到第3页,那么您应该从服务器获取它并将其添加到缓存中。
接下来,我将用于显示单个页面的逻辑分离给用户并从服务器获取页面。当用户单击下一页按钮时,您应该询问缓存对象以查找下一页,但不要返回任何内容。相反,缓存将在具有数据后调用回调函数。如果数据在缓存中,它将立即调用回调函数,将结果作为参数传递。然后,回调函数将更新呈现给用户的视图。如果数据不在缓存中,则向服务器发出ajax请求以获取该数据。检索数据后,将调用回调函数。
我经常反对在ajax中使用xml(我更喜欢ajaj;异步JavaScript和JSON。大声说出来也更有趣)。 JSON是一个更好的选择,因为它在JavaScript中使用起来要容易得多,它在内存和传输过程中占用的空间更少。由于JSON对象是普通的JavaScript对象,因此将它们添加到本地缓存就像连接两个数组(您已经拥有的缓存和从服务器检索的新元素)一样简单。