Paginating AJAX JSON返回数据

时间:2014-02-14 00:43:04

标签: php ajax json pagination

晚上好,

在关于对json编码数据进行分页的一些指示之后。

我一直在关注stackoverflow上的其他一些页面,由于某些原因似乎无法解决能够对返回的json数据进行分页的问题。

我查看了以下页面:How to use jQuery to paginate JSON data?PHP/JSON-jquery paginationhttp://www.9lessons.info/2010/10/pagination-with-jquery-php-ajax-and.html

我有以下几页:

fia.php(数据库脚本)

<?php

include('constants.inc.php');

$result=mysql_query("SELECT id, firstname, lastname FROM ".PERSON." ORDER BY lastname ASC, firstname ASC LIMIT 0, 30");
$num=mysql_numrows($result);

$data = array();

while ($row = mysql_fetch_row($result))
{
    $data[] = $row;
}

echo json_encode($data);
?>

fi.php(显示结果)

<?php
include('header.php');
?>
<script>
$(document).ready(function()
{
function loadit()
{
    $.ajax(
    {
        url: "fia.php",
        data: "",
        dataType: "json",
        success: function(d)
        {
            for (var i in d)
            {
                var r = d[i];

                var id = r[0];
                var fname = r[1];
                var lname = r[2];
                $('#stuff').append('<br/><b>ID</b> '+id+'<br/><b>Name</b> '+fname+' '+lname+'');
            }
        }
    });
}
loadit();
});
</script>
<div id="stuff">Stuff goes here</div>
<?php
include('footer.php');
?>

我似乎无法通过ajax调用将页面变量传递给php脚本。我只是通过数据传递页面变量吗?如果是这样,我如何在返回的结果下显示分页 - 只是寻找关于如何可以

完成的一些指示

如果我只使用PHP,我可以对它进行分页并将其调整得很好,并且当我向前或向后移动时它会切换页面

提前致谢(道歉,如果这个问题看起来真的很愚蠢)

3 个答案:

答案 0 :(得分:1)

如果你可以在php中管理分页,那么用ajax做起来应该不难:

  1. 您需要将页码(以及可选的每页项目数)发送到您的php脚本,这样您的data行就会变成:data: {pageNum: XX},
  2. 在您的PHP脚本中,您将使用$_GET('pageNum')和每页的项目数量来设置LIMIT子句的正确参数。
  3. 在您的php脚本中,您还需要获取项目总数,以便将该数字和数据项发送回ajax调用的成功函数。
  4. 在您的ajax调用的成功函数中,您使用javascript构建内容和分页,就像在php中使用d中返回的数据一样。
  5. 您需要修改loadit函数,使其接受参数 - 页码 - 并添加事件处理程序以捕获分页链接上的所有点击并将其传递给loadit()函数

答案 1 :(得分:1)

AJAX的一个主要好处是,您可以加载对页面的更改,而无需发送全新页面的请求。使用AJAX时,要意识到JavaScript将动态执行所有请求,PHP将为JavaScript请求提供数据。在您的情况下,我建议使用查询参数或其他东西向PHP发信号通知它应该生成哪些数据。例如,您可能希望使用$ _GET ['startingFrom']变量来检查是否应该从初始偏移量加载数据。然后,MySQL查询将获取数据,PHP将输出指定数据的的JSON。当用户单击页面上的“下一步”按钮时,您可以调用如下函数:

function clickedNext() {
    startingFrom += 30;
    $.ajax('fia.php', {
        data: {
            startingFrom: startingFrom
        }, ...
    });
}

答案 2 :(得分:1)

这是一般的想法(没有错误检查,但它应该让你开始) 在php文件中

$page = $_POST['page'];  // Numbers 1 - whatever
$limit = 30;  // you could also have this be a parameter passed to the script
$offset = ($page -1) * $limit;


$slimit = " LIMIT ".$limit . " OFFSET ". $offset;
$sQuery = "SELECT id, firstname, lastname FROM ".PERSON." ORDER BY lastname ASC, firstname ASC" .$limit;

在javascript中

$(document).ready(function()
{
     var page = 0;
function loadit()
{
    $.ajax(
    {
        url: "fia.php",
        data: {page: page},
        type: 'post',
        dataType: "json",
        success: function(d)
        {
            for (var i in d)
            {
                var r = d[i];

                var id = r[0];
                var fname = r[1];
                var lname = r[2];
                $('#stuff').append('<br/><b>ID</b> '+id+'<br/><b>Name</b> '+fname+' '+lname+'');
            }
        }
    });
}
loadit();

nextpage = function() {
   page++;
   loadit();
}
prevpage = function() {
   page--;
   loadit();
}
});