数据表服务器处理中的无效 JSON 响应
Invalid JSON response in datatables server proccessing
我正在尝试从数据库中检索我的数据并将其显示在数据tables 中
我的主函数文件包含一个函数来获取与另一个相关的特定列 table
if(! function_exists('get_item')){
function get_item($column,$tbl,$col_name,$id){
global $con;
$stmt = $con->prepare("SELECT $column FROM $tbl WHERE $col_name = ?");
$stmt->execute(array($id));
$row = $stmt->fetch();
if($stmt->rowCount() > 0){
return $row[$column];
}
}
}
然后在用户服务器处理文件中这是代码
$table = 'users';
$primaryKey = 'id';
$columns = array(
array('db' => 'id', 'dt' => 0,
'formatter' => function($d){
return "<input type='checkbox' onchange='toggleCheckbox()' name='checkUser[]' value='$d'/>";
}
),
array( 'db' => 'id', 'dt' => 1 ),
array('db' => 'avatar', 'dt' => 2,
'formatter' => function( $d) {
if($d != '')
return "<img src='../assets/uploads/users/$d' width='50' height='50' class='img-thumbnail img-responsive'/>";
else
return "<img src='../assets/uploads/users/no-img.jpg' width='50' height='50' class='img-thumbnail img-responsive'/>";
}
),
array('db' => 'username', 'dt' => 3),
array('db' => 'email', 'dt' => 4),
array('db' => 'role_id', 'dt' => 5 ,
'formatter' => function($d){
$role_name = get_item('role_name','roles','id',$d);
return $role_name;
}
),
array(
'db' => 'created_at',
'dt' => 6,
'formatter' => function( $d, $row ) {
return date( 'jS M y', strtotime($d));
}
),
array(
'db' => 'id',
'dt' => 7,
'formatter' => function ($d , $row){
return "
<a href='?do=Edit&id=$d' class='btn btn-warning'> <i class='fa fa-pen'></i></a>
<a onclick='confirmation(event)' href='?do=Delete&id=$d' class='btn btn-danger'> <i class='fa fa-trash'></i></a>
";
}
)
);
$sql_details = array(
'user' => 'root',
'pass' => '',
'db' => 'lineshop',
'host' => 'localhost'
);
require( '../ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
错误信息是
DataTables warning: table id=example - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1
如果我从用户服务器处理文件中删除 get_item 功能,它就可以正常工作
但我需要显示用户的角色名称
我该如何解决
听起来 get_item()
函数正在返回意外的内容并导致 JSON 编码的响应被视为无效。我建议通过修改 get_item()
来检查 get_item()
的输出,例如:
if($stmt->rowCount() > 0){
var_dump($row[$column]);exit;
//return $row[$column];
}
这将向您显示 get_item 返回的内容,并允许您验证它是否是正确的值。它还将提前退出 PHP 脚本,可能会显示否则不会显示的错误。
终于找到了这个问题的解决方案
这里
创建子查询
$table = '(SELECT u.*, r.role_name FROM users u INNER JOIN roles r ON u.role_id = r.id) tbl';
并将ssp.class.php
中的"$table"
替换为$table
我正在尝试从数据库中检索我的数据并将其显示在数据tables 中 我的主函数文件包含一个函数来获取与另一个相关的特定列 table
if(! function_exists('get_item')){
function get_item($column,$tbl,$col_name,$id){
global $con;
$stmt = $con->prepare("SELECT $column FROM $tbl WHERE $col_name = ?");
$stmt->execute(array($id));
$row = $stmt->fetch();
if($stmt->rowCount() > 0){
return $row[$column];
}
}
}
然后在用户服务器处理文件中这是代码
$table = 'users';
$primaryKey = 'id';
$columns = array(
array('db' => 'id', 'dt' => 0,
'formatter' => function($d){
return "<input type='checkbox' onchange='toggleCheckbox()' name='checkUser[]' value='$d'/>";
}
),
array( 'db' => 'id', 'dt' => 1 ),
array('db' => 'avatar', 'dt' => 2,
'formatter' => function( $d) {
if($d != '')
return "<img src='../assets/uploads/users/$d' width='50' height='50' class='img-thumbnail img-responsive'/>";
else
return "<img src='../assets/uploads/users/no-img.jpg' width='50' height='50' class='img-thumbnail img-responsive'/>";
}
),
array('db' => 'username', 'dt' => 3),
array('db' => 'email', 'dt' => 4),
array('db' => 'role_id', 'dt' => 5 ,
'formatter' => function($d){
$role_name = get_item('role_name','roles','id',$d);
return $role_name;
}
),
array(
'db' => 'created_at',
'dt' => 6,
'formatter' => function( $d, $row ) {
return date( 'jS M y', strtotime($d));
}
),
array(
'db' => 'id',
'dt' => 7,
'formatter' => function ($d , $row){
return "
<a href='?do=Edit&id=$d' class='btn btn-warning'> <i class='fa fa-pen'></i></a>
<a onclick='confirmation(event)' href='?do=Delete&id=$d' class='btn btn-danger'> <i class='fa fa-trash'></i></a>
";
}
)
);
$sql_details = array(
'user' => 'root',
'pass' => '',
'db' => 'lineshop',
'host' => 'localhost'
);
require( '../ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
错误信息是
DataTables warning: table id=example - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1
如果我从用户服务器处理文件中删除 get_item 功能,它就可以正常工作
但我需要显示用户的角色名称
我该如何解决
听起来 get_item()
函数正在返回意外的内容并导致 JSON 编码的响应被视为无效。我建议通过修改 get_item()
来检查 get_item()
的输出,例如:
if($stmt->rowCount() > 0){
var_dump($row[$column]);exit;
//return $row[$column];
}
这将向您显示 get_item 返回的内容,并允许您验证它是否是正确的值。它还将提前退出 PHP 脚本,可能会显示否则不会显示的错误。
终于找到了这个问题的解决方案
这里
创建子查询
$table = '(SELECT u.*, r.role_name FROM users u INNER JOIN roles r ON u.role_id = r.id) tbl';
并将ssp.class.php
中的"$table"
替换为$table