我有多个复选框组,如果选中了它的值,就会用jquery传递到对象中的php页面,我得到的结果都很好。现在我想对结果进行分页。我不知道该怎么办。因为使用分页不会返回AJAX POST传递的任何值。我的JS:
$(":checkbox").on('change', function() {
var mygroup = {};
$(':checkbox:checked').each(function(i) {
var val = this.value;
var name = this.name;
mygroup[name] = (mygroup[name] || []).concat([val]);
});
var itemsPerPage = 5;
if(typeof url == 'undefined' ){
url = "finalprocess1.php?page=1&items_per_page="+itemsPerPage;
}
$.ajax({
type: "POST",
url: 'finalprocess.php',
data: mygroup,
success: function(data) {
$.getJSON(url, function(data){ //NOT SURE IF I CAN DO THIS
var result = userTemplate({users : data.users}) //UNDERSCORE TEMPLATING
$("#theresult").html(result);
});
}
});
});
您应该在php端的查询中添加LIMIT和OFFSET子句,以根据页面限制获取某些范围:(例如使用纯sql、php和PDO)
$limit = $_GET['items_per_page']; //Page limit
//Get request page, if not set to 1
!null == $_GET['page'] ? $page = $_GET['page'] : $page = 1;
//Get total rows count
$totalRows = $this->db->query('SELECT FOUND_ROWS from items')->fetchColumn();
//Calculate number of pages
$totalPages = ceil($totalRows / $limit);
//Show next or previous button only when needed validation
$hasPrevPage = $page > 1 ? true : false;
$hasNextPage = $page < $totalPages ? true : false;
//Calculate offset
$offset = ($page - 1) * $limit;
$sql = "SELECT * from items
LIMIT :pageLimit OFFSET :offset"; //The standard pagination clause
$query = $this->db->prepare($sql);
$query->bindValue(':pageLimit', $limit);
$query->bindValue(':offset', $offset);
$query->execute();
return $query->fetchAll();
然后,在您的视图中,您应该创建两个链接,上一个和下一个,维护您的请求URI并修改页面参数,+1到下一个页面,-1到上一个,这样您就可以导航结果
就像你在这里做的那样:
url = "finalprocess1.php?page=1&items_per_page="+itemsPerPage;
但是修改页面参数:
prevUrl = "finalprocess1.php?page=" + (page-1) + "&items_per_page=" + itemsPerPage;
nextUrl = "finalprocess1.php?page=" + (page+1) + "&items_per_page=" + itemsPerPage;
确保将这些验证传递给js,以便仅在需要时显示按钮,并防止偏移错误。
$hasPrevPage = $page > 1 ? true : false;
$hasNextPage = $page < $totalPages ? true : false;