Таблицы данных выдают недопустимый ответ JSON

#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 сам является массивом.