#javascript #php #jquery #mysql #datatables
#javascript #php #jquery #mysql #таблицы данных
Вопрос:
Я сталкиваюсь с проблемами с плагином Datatables при извлечении данных с помощью SSP. Я использовал пользовательскую библиотеку SSP, но это возвращает ошибку недопустимого ответа JSON. Кто-нибудь здесь, кто внедрил пользовательскую библиотеку SSP? Мне придется использовать JOINS
, WHERE
GROUP BY
и т.д. Я также открыт для предложений о том, как реализовать функцию фильтрации в реальном времени в таблицах с использованием PHP, как показано в таблице примеров здесь. Итак, если у вас, ребята, есть какие-либо идеи о том, как реализовать это без использования таблиц данных, это также будет работать нормально.
Предупреждение о таблицах данных: идентификатор таблицы = example — Недопустимый ответ JSON. Для получения дополнительной информации об этой ошибке, пожалуйста, смотритеhttp://datatables.net/tn/1
Инициализация
< script >
$(document).ready(function() {
$('#example').DataTable({
colReorder: true,
"scrollX": true,
"processing": true,
"serverSide": true,
"ajax": "rep_down_data.php"
});
}); <
/script>
Тот, в котором содержится запрос JOIN. Здесь использовалась пользовательская библиотека SSP.
<?php
$table = 't_user';
$primaryKey = 'id';
$columns = array(
array( 'db' => 'is_phone_verified', 'dt' => 0 ),
array( 'db' => 'email', 'dt' => 1 ),
array( 'db' => 'mobile_number', 'dt' => 2 ),
array( 'db' => 'first_name', 'dt' => 3 ),
array( 'db' => 'last_name', 'dt' => 4 ),
array( 'db' => 'rep_code', 'dt' => 5 ),
);
require('config.php');
$sql_details = array(
'user' => $db_username,
'pass' => $db_password,
'db' => $db_name,
'host' => $db_host
);
require('ssp.customized.class.php' );
$joinQuery = "FROM `t_user` AS `u` JOIN `t_user_course` AS `ud` ON (`ud`.`user_id` = `u`.`id`)";
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns, $joinQuery )
);
Это работает нормально и содержит SSP-файл Datatables (rep_down_data.php )
<?php
$table = 't_user';
$primaryKey = 'id';
$columns = array(
array( 'db' => 'created_at', 'dt' => 0 ),
array( 'db' => 'email', 'dt' => 1 ),
array( 'db' => 'mobile_number', 'dt' => 2 ),
array( 'db' => 'first_name', 'dt' => 3 ),
array( 'db' => 'last_name', 'dt' => 4 ),
);
require('config.php');
$sql_details = array(
'user' => $db_username,
'pass' => $db_password,
'db' => $db_name,
'host' => $db_host
);
require( 'ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
HTML-код для таблицы
<section id="column-filtering">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h4 class="card-title">Rep Downloads</h4>
<a class="heading-elements-toggle"><i class="la la-ellipsis-v font-medium-3"></i></a>
<div class="heading-elements">
<ul class="list-inline mb-0">
<li><a data-action="collapse"><i class="ft-minus"></i></a></li>
<li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
<li><a data-action="expand"><i class="ft-maximize"></i></a></li>
<li><a data-action="close"><i class="ft-x"></i></a></li>
</ul>
</div>
</div>
<div class="card-content collapse show">
<div class="card-body card-dashboard">
<table id="example" class="display nowrap table table-striped table-bordered" style="width:100%;">
<thead>
<tr>
<th>Enr. Date</th>
<th>Email</th>
<th>Mobile Number</th>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Enr. Date</th>
<th>Email</th>
<th>Mobile Number</th>
<th>First Name</th>
<th>Last Name</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
</div>
</section>
Комментарии:
1. Пожалуйста, опубликуйте свой фактический код, а не скриншоты
2. @Darren Я отредактировал сообщение со скриншотами. Дайте мне знать, если понадобится что-нибудь еще.
3. Пожалуйста, проверьте ajax-ответ ваших php-скриптов в вашем браузере и опубликуйте его здесь (по крайней мере, структурно).
Ответ №1:
Во-первых, выключено, вам не нужно указывать заголовки столбцов в вашем HTML. Вы можете задать их с помощью columns
/ columnDefs
options с title
свойством. Таким образом, вы не увидите таблицу со стилем по умолчанию до инициализации DataTable. Ваша табличная разметка может просто выглядеть следующим образом: <table id="example" ...></table>
.
Но это, конечно, не основная причина вашей проблемы.
Что мне кажется подозрительным, так это ваш SQL. Похоже, вы дважды ссылаетесь на свою t_user
таблицу: первый раз, задав $table
переменную, второй — с помощью этой части вашего $joinQuery
— FROM
. Так что, если у вас есть возможность вернуть выходные данные запроса, скажем, с помощью
t_user var_dump()
в соответствующем месте вашего кода, или echo
самого запроса, чтобы проверить его достоверность, я думаю, это дало бы вам подсказку.
Еще одна вещь, в которой вы должны быть уверены, это то, что ваш вывод SQL содержит массив массивов или массив объектов, которые соответствуют вашим строкам, и любой из них включен в data
/ aaData
вашего выходного JSON. В противном случае вам может потребоваться указать свойство JSON, которое содержит ваш массив в ajax.dataSrc
опции, или установить для него значение пустой строки, если ваш JSON сам является массивом.