There are times when reading data from the DOM is simply to slow or unwieldy, particularly when dealing with data sets of a thousand rows or more. To address this DataTables' server-side processing feature provides a method to let all the "heavy lifting" be done by a database engine on the server-side (they are after-all highly optimised for exactly this kind of thing), and then have that information drawn in the user's web-browser. As such you can display tables consisting of millions of rows with ease.
When using server-side processing, DataTables will make an XHR request to the server for each draw of the information on the page (i.e. when paging, sorting, filtering etc). DataTables will send a number of variables to the server to allow it to perform the required processing, and then return the data in the format required by DataTables. This is detailed below.
The following information is sent to the server for each draw request. Your server-side script must use this information to obtain the data required for the draw.
| Type | Name | Info |
|---|---|---|
| int | iDisplayStart | Display start point |
| int | iDisplayLength | Number of records to display |
| int | iColumns | Number of columns being displayed (useful for getting individual column search info) |
| string | sSearch | Global search field |
| boolean | bEscapeRegex | Global search is regex or not |
| boolean | bSortable_(int) | Indicator for if a column is flagged as sortable or not on the client-side |
| boolean | bSearchable_(int) | Indicator for if a column is flagged as searchable or not on the client-side |
| string | sSearch_(int) | Individual column filter |
| boolean | bEscapeRegex_(int) | Individual column filter is regex or not |
| int | iSortingCols | Number of columns to sort on |
| int | iSortCol_(int) | Column being sorted on (you will need to decode this number for your database) |
| string | sSortDir_(int) | Direction to be sorted - "desc" or "asc". Note that the prefix for this variable is wrong in 1.5.x where iSortDir_(int) was used) |
| string | sEcho | Information for DataTables to use for rendering |
In reply to each request for information that DataTables makes to the server, it expects to get a well formed JSON object with the following parameters.
| Type | Name | Info |
|---|---|---|
| int | iTotalRecords | Total records, before filtering (i.e. the total number of records in the database) |
| int | iTotalDisplayRecords | Total records, after filtering (i.e. the total number of records after filtering has been applied - not just the number of records being returned in this result set) |
| string | sEcho | An unaltered copy of sEcho sent from the client side. This parameter will change with each draw (it is basically a draw count) - so it is important that this is implemented. Note that it strongly recommended for security reasons that you 'cast' this parameter to an integer in order to prevent Cross Site Scripting (XSS) attacks. |
| string | sColumns | Optional - this is a string of column names, comma separated (used in combination with sName) which will allow DataTables to reorder data on the client-side if required for display |
| array array mixed | aaData | The data in a 2D array |
{
"sEcho": 3,
"iTotalRecords": 57,
"iTotalDisplayRecords": 57,
"aaData": [
[
"Gecko",
"Firefox 1.0",
"Win 98+ / OSX.2+",
"1.7",
"A"
],
[
"Gecko",
"Firefox 1.5",
"Win 98+ / OSX.2+",
"1.8",
"A"
],
...
]
}