вы можете использовать ajax атрибут таблицы данных.
$('#tbl_subject').DataTable( {
processing: true,
serverSide: true,
serverMethod: 'post',
ajax: 'includes/subject_handler.php'
columns: [
{data: 'chapter', name: 'chapter'},
{data: 'topic', name: 'topic'},
{data: 'content', name: 'content'},
]
} );
А для серверной части, если вам нужно получить доступ к значению поиска, вы можете сделать это,
$requestData = $_REQUEST;
$requestData['search']['value']
В вашем случае это то, как использовать его в , где close.
$sql .= " AND ( chapter LIKE '" . $requestData['search']['value'] . "%' ";
$sql .= " OR topic LIKE '" . $requestData['search']['value'] . "%' ";
$sql .= " OR content LIKE '" . $requestData['search']['value'] . "%' )";
И если вам нужно получить данные сортировки, вы можете получить это,
$requestData['order'][0]['column'] // column name which user sorts
$requestData['order'][0]['dir'] // derection (ASC/DESC)
В вашем случае это будет так, и не забудьте использовать $requestData['start']
и $requestData['length']
для работы нумерации страниц.
$sql .= " ORDER BY " . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " ";
Вы можете включить это значение поиска и значения порядка в свой sql запрос внутри серверной части.
И, наконец, вам необходимо отформатировать данные перед отправкой во внешний интерфейс.
$json_data = array(
"draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw.
"recordsTotal" => intval($totalData), // total number of records
"recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData
"data" => $data // total data array
);
echo json_encode($json_data);
Это намного проще, чем выглядит. Необходимо получить общее количество записей из запроса и общее количество отфильтрованных записей из другого запроса и набора данных в json.
Я добавил предыдущий пример sql только для пояснения. Для предотвращения SQL инъекции вы должны использовать Prepared Statements .
$sql .= " AND ( chapter LIKE ? OR topic LIKE ? OR content LIKE ?";
$params = array($requestData['search']['value'] . "%", $requestData['search']['value'] . "%", $requestData['search']['value'] . "%");
$stmt = $handle->prepare($sql);
$stmt->execute($params);
И вам нужно сделать то же самое для ORDER BY и LIMIT часть запроса.
и внутри этого учебника есть хороший пример того, как это работает на бэкэнде.
Вы также можете отправлять данные в бэкэнд.
ajax: {
url: "Your url",
data: function (d) {
d.var1= 'var 1';
d.var2= 'var 2';
}
},
И получить доступ к данным в серверной части следующим образом.
$var1 = $_REQUEST['var1'];
$var2 = $_REQUEST['var2'];
И будьте осторожны, чтобы не использовать начало и конец (например: - d.start= 'var 1';
) для передачи данных на задний план. конец, так как они используются для нумерации страниц. В этой ссылке есть хороший пример.