在使用SSP提取数据时,Datatables插件遇到问题。我使用过Custom SSP库,但是返回的错误是JSON响应无效。这里有人实现了自定义SSP库吗?我将不得不使用JOINS
,WHERE
,GROUP BY
等。对于示例如何使用PHP在表中实现实时过滤功能,我也持开放态度,例如示例表{ {3}}。因此,如果您对如何在不使用数据表的情况下实现这一点有任何想法,那也可以正常工作。
DataTables警告:表格ID =示例-无效的JSON响应。有关此错误的更多信息,请参见here
初始化
< 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 )
);
此程序运行正常,并且具有Datatables SSP文件(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>
答案 0 :(得分:1)
首先,您无需在HTML中指定列标题。您可以使用具有columns
属性的columnDefs
/ title
选项来设置。这样,在初始化DataTable之前,您将不会看到具有默认样式的表。您的表格标记可能看起来像是:<table id="example" ...></table>
。
但是,那当然不是您问题的根本原因。
对我来说可疑的是您的SQL。好像您在两次引用t_user
表一样:第一次,是通过设置$table
变量,第二次是使用$joinQuery
-FROM
t_user
的这一部分。因此,如果您有机会放弃查询的输出,例如将var_dump()
放在代码的适当位置,或者echo
查询本身以检查其有效性,那么我猜想,会给你一个提示。
您必须确定的另一件事是,您的SQL输出包含与行相对应的数组数组或对象数组,并且其中的任何一个都包含在您的data
/ aaData
中输出JSON。否则,您可能需要在ajax.dataSrc
选项中指定将数组保存的JSON属性,或者如果JSON本身是数组,则将其设置为空字符串。