Datatables (): упорядочивание + нумерация страниц с помощью Ajax + Mysql - PullRequest
0 голосов
/ 20 октября 2019

Я борюсь с Datatables (), использующим AJAX для извлечения данных из таблицы MySQL, на которой запущен мой PHP-скрипт.

Я понимаю, что Datatables () имеет несколько функций, включая сортировку, разбиение на страницы и т. Д., Все из которыхотображаются при создании таблицы, но не работают при нажатии, даже если для processing и ServerSide установлено значение true. (Обратите внимание, что окно поиска работает)

Просматривая официальную документацию ( здесь ) и другие статьи SO ( здесь ), я не вижу ни одного ответа AJAX, которыйконкретно указывает порядок сортировки или нумерацию страниц (например, номер записи, записи на страницу и т. д.), которые позволили бы такую ​​функциональность.

Поэтому мой вопрос: действительно ли таблицы данных поддерживают нумерацию страниц и порядок сортировки дляAJAX "из коробки", и если нет, то какой самый эффективный способ достичь этого для таблиц с 5000-7000 записей?

У меня нет проблем с использованием функций при работе с не-AJAXтаблица, это происходит только при работе с AJAX и обновлении таблицы только в отличие от всей страницы.

Ниже приведен мой серверный скрипт, оцените любые указатели. Спасибо.

if(isset($_POST['action']) && ($_POST['action'] == 'view_auto_cc_email_AJAX')) {

    if(isset($_SESSION['Access'])) {

        // Start MySQLi connection
        include 'connect_db.php';
        $db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

        // display error if connection cannot be established
        if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']'); }

        // define variables
        $requestData = $_REQUEST;       // DataTables AJAX request  
        $holidex = mysqli_real_escape_string($db,$_SESSION['Holidex']);

        // admins can see all records, other only for their property
        if($holidex == 'ADMIN') {
            $sql = "SELECT * FROM `qci_dmlog_email` WHERE NOT `ID` = ''";
        } else {
            $sql = "SELECT * FROM `qci_dmlog_email` WHERE `Holidex` = '".$holidex."'"; }

        // run query to get total number of records
        $result = $db->query($sql) or die(mysqli_error($db));
        $totalData = $result->num_rows;

        // if there is a search parameter, $requestData['search']['value'] contains search parameter
        if( !empty($requestData['search']['value']) ) {
            $sql.=" AND ( `Holidex` LIKE '".$requestData['search']['value']."%' ";
            $sql.=" OR `First` LIKE '".$requestData['search']['value']."%' ";
            $sql.=" OR `Last` LIKE '".$requestData['search']['value']."%' ";
            $sql.=" OR `Email` LIKE '".$requestData['search']['value']."%' )";
        }

        // sort by holidex code and last name
        $sql.=" ORDER BY `Holidex`, `Last`";

        // run final query
        $result = $db->query($sql) or die(mysqli_error($db));       

        if($result->num_rows > 0) {
            // return total number of rows for pagination
            $totalFiltered = $result->num_rows;

            // return table data - MUST BE NON-ASSOCIATIVE ARRAY
            while($row = mysqli_fetch_array($result)) {
                $data[] = array(
                    $row['ID'],
                    $row['Holidex'],
                    $row['First'],
                    $row['Last'],
                    $row['Email'],
                    $row['cc_dmlog_alert'],
                    $row['cc_dmlog_report'],
                    $row['cc_dmlog_farewell']
                );
            }

            // finalize array with elements required by DataTable plugin
            $json_data = array(
              "draw"            => intval( $requestData['draw'] ),  // unique draw number identifier (required)
              "recordsTotal"    => intval( $totalData ),            // total number of records
              "recordsFiltered" => intval( $totalFiltered ),        // total number of records after searching, if there is no searching then totalFiltered = totalData
              "success"         => true,                            // success message - false / true (required)
              "aaData"          => $data                            // table data as array
            );

            echo json_encode($json_data);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...