DataTables 1.10 服务器端处理

示例表

有几种方法可以将数据注入 DataTables。Serverside Processing 只是一种方法。通过这种方式,DataTables 具有预先配置的端点以从中检索数据,并且该端点负责接受 DataTable 应用的所有分页/过滤/排序请求。这与从服务器发送完整数据集并让 DataTables 根据你的使用情况在客户端完成这一点有各种利弊。

var tbl = $('#example').DataTable({
  processing: true,
  serverSide: true,
  ajax: {
    url: '/echo/json/',
    method: 'post'
  },
  columns: [{
    data: 'First',
    title: 'First Name'
  }, {
    data: 'Last',
    title: 'Last Name'
  }]
});

挂钩 preXhr 事件以向 ajax 请求发送附加数据的示例

此事件在进行 ajax 调用之前直接触发,允许你修改请求正文。如果存在影响返回到表的数据的表单(设想可能在日期范围内或类似范围内过滤的最小/最大条),这将非常有用。

tbl.on('preXhr.dt', function(ev, settings, data) {
    $.extend(data, {
      min: $('form [name=min]').val(), 
      max: $('form [name=max]').val()
    });
});

处理请求的服务器端要求的说明

在典型的 DataTables 无选项实例中,所有过滤,排序和分页都在客户端浏览器中处理。启用 S​​erverside Processing 后,这些任务将转移到 Web 服务器。对于非常大的数据集,这些数据集可能无法完整地发送到客户端,这可以提供帮助。

配置 ajax 端点时,Datatables 请求会发送几个默认参数。它可以变得非常长,因此,不是逐项列出,而是对服务器职责的一般概述可能更有帮助。

从你可能提供给请求的任何可选参数开始,编译数据集并为 DataTables 操作做好准备。使用 search[value]search[regex] 参数对所有列/属性应用任何过滤。单个列过滤器也有 columns[i][search][value]columns[i][search][regex] 参数,但这些参数在 DataTables 的简单实例中并不常用。

使用各种 order 参数对过滤后的数据进行排序。与搜索参数一样,每列将有一组排序参数,在这些参数上启用排序。order[i][column]order[i][column][dir]

一旦过滤和排序完成,就可以使用 startlength 参数根据 DataTables 请求分页数据。在 .NET 中,这可能看起来像:

int start = Int32.TryParse(Request["start"]);
int length = Int32.TryParse(Request["length"]); 
return MyData.Skip(start).Take(length);

示例响应

这是 DataTables 期望的粗略响应结构。无论你的数据是什么(2d 数组,对象数组等)嵌套在 data 属性中,其他属性都会播放 DataTable 的核心以绘制有关分页和过滤的信息(例如“显示记录 11-20 of 500(从 1000 过滤)” )

{
  "draw": 1,
  "recordsTotal": 57,
  "recordsFiltered": 57,
  "data": [/*your data goes here*/]
}

另请参阅 .rows.add(data)data 选项, 了解使用 JSON 数据设置 DataTable 内容的替代方法。当然,DataTables 也可以从静态 HTML 或 HTML5 data- 属性初始化