使用AJAX POST和$.getJSON进行复杂的分页


Complex pagination with AJAX POST and $.getJSON

我有多个复选框组,如果选中了它的值,就会用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端的查询中添加LIMITOFFSET子句,以根据页面限制获取某些范围:(例如使用纯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;