Datatables возвращает все строки вместо 10

-2

Вот мой 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 элементов, я получил весь список. Вот предварительный просмотр того, что отображается:

Изображение 174551

Любая идея о том, как ограничить таблицу до 10 результатов?

Теги:
datatables

3 ответа

2

Вы проверили ключевое слово 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
  • 1
    Этот запрос не будет разбит на страницы.
  • 0
    @ Вохуман прав. Это не удастся нумерации страниц.
Показать ещё 3 комментария
0

Хорошо, я нашел решение своей проблемы.

Вот мой новый массив данных:

$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"
        }
    ]
});
  • 0
    Вы должны прочитать параметры start и length (вы можете использовать var_dump($_POST) для проверки всех отправленных параметров), отправленные таблицами данных на стороне сервера для разбивки на страницы. Сервер должен отвечать за запросы к БД (разбиение на страницы. Поиск, сортировка, ...), в противном случае вы не сможете воспользоваться всеми возможностями / гибкостью, которые предоставляют таблицы данных.
0

Используйте параметр pageLength в datatables - например,

$('#myTable').dataTable( {
    "pageLength": 10 
});

Это выведет 10 строк

  • 0
    Это не работает, и по умолчанию установлено 10 строк.
  • 0
    хорошо, вы можете создать скрипку, чтобы мы могли видеть, что происходит - есть ли ошибки в консоли?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню