使用 DataTables 插件的服务器端分页

Posted

技术标签:

【中文标题】使用 DataTables 插件的服务器端分页【英文标题】:Server side pagination using DataTables plugin 【发布时间】:2014-11-13 11:53:12 【问题描述】:

服务器每页返回 15 条记录,总记录超过 2000 条。我想显示前 15 条记录,然后在每次单击“下一步”按钮时显示剩余的所有记录,(每页 15 条)。 为此,我们是做服务器端分页还是客户端?

这是我的表格和我在DataTables 中用于分页的属性:

  var tableData = self.accountCollection.getData();

        var tableColumns = this.accountCollection.getColumns();
        var totalRecs = this.accountCollection.length;

        //create the UI grid containing the list of items

        this.resultsTable = tableEl.dataTable( 
            "bServerSide": true,
            "sEcho": 3,
            "iTotalRecords": totalRecs,
            "iTotalDisplayRecords": 15,
            "aaData": tableData,
            "aoColumns": tableColumns,
            "aaSorting": [[1,'asc']],
           );



getData: function () 

        var returnData = [];
        $.each(this.models, function (idx, accountModel) 
            returnData.push(accountModel.attributes);
        );
        return returnData;
    ,

returnData 将返回一个包含字段的对象,我将在表格中填充字段。

返回的对象(大致):

Object
 accountName: "No Company"
 address1: "1234 asdf"
  address2: ""
  billingAcctId: null
  billingSystem: null
  city: "mountain view"
  comments: null
   country: "USA"

然后将调用 getData() 函数以使用以下方法从数据库中返回数据:

var tableData = this.accountCollection.getData()

所以基本上 tableData 将有必要的字段和值显示在表中。现在我可能从服务器返回了 1000 多条记录。因此我需要分页。

小提琴中的那个是我尝试过的,对分页没有任何影响。

我想我有 DataTables 附带的基本分页,但现在我需要有一个服务器端,一次只能显示 15 条记录,然后单击“下一个”和“上一个”按钮 i应该能够进行 ajax 调用以获取每页 15 条的剩余记录。

我希望这可以帮助您更好地理解。如果您需要更多详细信息,请告诉我。

如何使用 DataTables 实现分页?

谢谢

【问题讨论】:

【参考方案1】:

分页工程总显示记录您需要执行以下最小更改。

"iTotalDisplayRecord" 将是总过滤记录

【讨论】:

【参考方案2】:

这会查找你的小巷 -> http://datatables.net/examples/data_sources/js_array.html 它纯粹是客户端

不过,据我所知,实现实际分页的唯一方法(使其更快,因为您一次只能从数据库中获取 15 条记录)是通过服务器端的 ajax-ing(即@987654322 @)

在我看来你并没有这样做。除非... self.accountCollection.getData() 是一个 ajax 回调,但无论如何,当您实例化 DataTable 时,您应该使用“ajax: tableData”而不是“aaData: tableData”。

您可能会将数据表返回的 JSON 与用于与数据表交互/初始化的数据表 API 混淆。

抱歉,这有点过头了,这有意义吗?

【讨论】:

好吧,'self.accountCollection' 是从服务器获取用户列表:如下所示.. this.accountCollection = new ipiadmin.collections.AccountCollection();进行客户端调用还有意义吗? 您可以覆盖 self.accountCollection 以在它获取的 JSON 中包含分页详细信息。基本上,您希望您的 JSON 看起来像 "sEcho": 15,"iTotalRecords": 2000, "iTotalDisplayRecords": 2000,"aaData": [your first 15 rows of data] 然后使用 self.accountCollection 作为数据表 init 中的 ajax 源。另外,只是好奇,您的堆栈(客户端和服务器)是什么? 有什么方法可以提供一个例子...谢谢您的帮助! 这是一个fiddle(基本上只是数据表example的一个副本)。这可能是用你所拥有的东西来启动和运行的最简单的方法。很抱歉造成混乱,我之前错了,你不能将“ajax”参数与回调函数一起使用(我在想jQuery在ajax回调上的成功)。如果你想 ajax 它(真正的分页),你需要像 php 脚本或其他东西一样点击后端的源代码(即 self.accountCollection.getData() 是如何实际工作的?)。

以上是关于使用 DataTables 插件的服务器端分页的主要内容,如果未能解决你的问题,请参考以下文章

用DataTables实现服务器端分页

datatables后端分页

ASP.NET MVC+EF在服务端分页使用jqGrid以及jquery Datatables的注意事项

如何在 ASP.net Core 中实现 dataTables 服务器端分页/搜索/排序

围绕DataTable';允许在Rails应用程序中与服务器端分页同步的ajax方法

datatable表格框架服务器端分页查询设置