Я борюсь с 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);
}
}
}