Server-side processing
serverSide: true delegates paging/sorting/filtering to the backend. This demo's ajax is a function simulating a server over 500 rows, only the current page is ever sent to the browser.
| ID | Name | Position | Office | Age | Start date | Salary | Status |
|---|
import { inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { type Config } from 'ngx-datatables-net';
interface ServerResponse {
recordsTotal: number;
recordsFiltered: number;
data: unknown[];
}
private http = inject(HttpClient);
options: Config = {
serverSide: true,
processing: true,
columns: [
{ data: 'id', title: 'ID' },
{ data: 'name', title: 'Name' },
{ data: 'position', title: 'Position' },
{ data: 'office', title: 'Office' },
],
// DataTables puts paging, sort and search into `request`. Post it to your
// API and call back with the response. Only the current page is fetched.
ajax: (request, callback) => {
this.http.post<ServerResponse>('/api/employees', request).subscribe((res) =>
callback({
draw: request.draw,
recordsTotal: res.recordsTotal,
recordsFiltered: res.recordsFiltered,
data: res.data,
}),
);
},
};Server-side backends
Server-side processing is a documented JSON contract: DataTables sends paging, ordering and search parameters, and your endpoint returns draw, recordsTotal, recordsFiltered, data. The shape is the same regardless of frontend, so libraries that implement it for other stacks work unchanged with ngx-datatables-net:
- yajra/laravel-datatablesLaravel / PHPThe standard Laravel + Eloquent server-side package.
- node-datatableNode / ExpressBuilds the SQL query for server-side processing; you run it against your DB.
- datatables-queryNode / MongoDBExpress + Mongoose/MongoDB server-side processing.
- datatables-flask-serversidePython / FlaskA reusable ServerSideTable class for Flask back-ends.
- django-ajax-datatablePython / DjangoServer-side processing view for Django models (verify current maintenance).
No package for your stack? Implement the server-side protocol directly, it is just the request/response shape above.