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

时间:2016-07-23 16:39:39

标签: javascript php jquery ajax pagination

我有多个复选框组,如果选中它的值,则使用jquery传递给对象中的php页面,我得到的结果都很好。现在我想对结果进行分页。我不知道该如何解决这个问题。因为使用分页不会返回AJAXPOST传递的任何值。我的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);
            });
        }
    });

});

1 个答案:

答案 0 :(得分:0)

你应该在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;