数据表服务器处理中的无效 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