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 无选项实例中,所有过滤,排序和分页都在客户端浏览器中处理。启用 Serverside 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]
一旦过滤和排序完成,就可以使用 start
和 length
参数根据 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-
属性初始化