Datatables, выбрасывающий неверный ответ JSON - PullRequest
0 голосов
/ 09 марта 2019

У меня возникают проблемы с плагином Datatables при получении данных с использованием SSP.Я использовал библиотеку Custom SSP , но это возвращает ошибку Invalid JSON response.Кто-нибудь здесь, кто внедрил пользовательскую библиотеку SSP?Мне придется использовать JOINS, WHERE, GROUP BY и т. Д. Я также открыт для предложений о том, как реализовать функцию Live Filtering в таблицах с использованием PHP, как показано в примере таблицы здесь ,Так что если вы, ребята, имеете какое-либо представление о том, как реализовать это без использования Datatables, это также сработало бы.

Предупреждение DataTables: table id = 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 Ответ

1 голос
/ 10 марта 2019

Во-первых, вам не нужно указывать заголовки столбцов в вашем HTML. Вы можете установить их, используя опции columns / columnDefs со свойством 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 является самим массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...