数据表抛出无效的 JSON 响应
Posted
技术标签:
【中文标题】数据表抛出无效的 JSON 响应【英文标题】:Datatables Throwing Invalid JSON Response 【发布时间】:2019-07-31 02:56:22 【问题描述】:我在使用 SSP 获取数据时遇到了 Datatables 插件的问题。我使用了Custom SSP 库,但它返回了无效 JSON 响应的错误。这里有人实现了自定义 SSP 库吗?我将不得不使用JOINS
、WHERE
、GROUP BY
等。我也愿意接受有关如何使用 php 在表中实现实时过滤功能的建议,如示例表here 所示。因此,如果你们对如何在不使用 Datatables 的情况下实现这一点有任何想法,那也可以。
DataTables 警告:表 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 )
);
运行良好,并且有 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>
【问题讨论】:
请发布您的实际代码,而不是屏幕截图 @Darren 我已经用截图编辑了帖子。如果还需要什么,请告诉我。 请用您的浏览器检查您的 php 脚本 ajax 响应并在此处发布(至少在结构上)。 【参考方案1】:首先,您不需要在 html 中指定列标题。您可以使用带有title
属性的columns
/ columnDefs
选项设置那些。这样,在初始化 DataTable 之前,您将看不到具有默认样式的表。您的表格标记可能看起来像:<table id="example" ...></table>
。
但这当然不是问题的根本原因。
在我看来可疑的是您的 SQL。看起来您两次引用了 t_user
表:第一次,通过设置 $table
变量,第二次,使用 $joinQuery
的这一部分 - FROM
t_user
。因此,如果您有机会返回查询的输出,例如,在代码的适当位置使用var_dump()
,或者使用echo
查询本身来检查其有效性,我猜,那会给出你给个提示。
您必须确定的另一件事是,您的 SQL 输出包含与您的行相对应的数组或对象数组,并且其中任何一个都包含在输出 JSON 的 data
/ aaData
中。否则,您可能需要在 ajax.dataSrc
选项中指定保存数组的 JSON 属性,或者如果您的 JSON 本身是数组,则将其设置为空字符串。
【讨论】:
以上是关于数据表抛出无效的 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章