Вот мой AJAX:
$('.customers-datatable').dataTable( {
"order": [[ 0, "asc" ]],
"processing": true,
"serverSide": true,
"ajax": {
url: 'ajax/customers.php?action=list',
type: "POST"
},
"columns": [
null,
null,
null,
null,
null,
{ "orderable": false, "width": "20px" }
]
});
Вот мой PHP/MySql:
$req = $pdo->prepare('SELECT * FROM customers');
$req->execute();
$result['draw'] = 1;
$result['recordsTotal'] = $req->rowCount();
$result['recordsFiltered'] = 10;
$result['data'] = array();
while( $row = $req->fetch() ) {
$result['data'][] = array($row['lastname'] . ' ' . $row['firstname'], $row['zipcode'], $row['city'], $row['email'], $row['telephone'], "");
}
$req->closeCursor();
Итак, вместо того, чтобы получить 10 элементов, я получил весь список. Вот предварительный просмотр того, что отображается:
Любая идея о том, как ограничить таблицу до 10 результатов?
Вы проверили ключевое слово limit
?
SELECT * FROM customers LIMIT 0,10
и в общем случае limit
было бы в сочетании с ORDER BY some_column DESC
чтобы придать ему больше чувств (например, по времени или по id).
Обновлено:
для разбиения на страницы, просто переходите к различным аргументам при переключении страниц:
SELECT * FROM customers LIMIT 0,10 // 1-10 rows for page 1
SELECT * FROM customers LIMIT 10,10 // 11-20 rows for page 2
SELECT * FROM customers LIMIT 20,10 // 21-30 rows for page 3
.... and so on
Хорошо, я нашел решение своей проблемы.
Вот мой новый массив данных:
$result['data'][] = array( "name" => $row['lastname'] . ' ' . $row['firstname'],
"zipcode" => $row['zipcode'],
"city" => $row['city'],
"email" => $row['email'],
"telephone" => $row['telephone'],
"action" => "<a href=\"#\" class=\"button-delete\" id=\"" . $row['customer_id'] . "\"><i class=\"fa fa-close fa-2x text-danger\"></i></a>"
);
И вот мой вызов ajax (я установил serverSide в false, потому что он разбил разбивку на страницы):
$('.customers-datatable').dataTable( {
"order": [[ 0, "asc" ]],
//responsive: true,
"processing": true,
"serverSide": false,
"ajax": {
url: 'ajax/customers.php?action=list',
type: "POST"
},
"columns": [
{ "data": "name" },
{ "data": "zipcode" },
{ "data": "city" },
{ "data": "email" },
{ "data": "telephone" },
{ "data": "action",
"orderable": "false",
"width": "20px"
}
]
});
start
и length
(вы можете использовать var_dump($_POST)
для проверки всех отправленных параметров), отправленные таблицами данных на стороне сервера для разбивки на страницы. Сервер должен отвечать за запросы к БД (разбиение на страницы. Поиск, сортировка, ...), в противном случае вы не сможете воспользоваться всеми возможностями / гибкостью, которые предоставляют таблицы данных.
Используйте параметр pageLength
в datatables - например,
$('#myTable').dataTable( {
"pageLength": 10
});
Это выведет 10 строк