我正在尝试渲染一个自动为每行插入和ID的DataTable。
根据http://datatables.net/release-datatables/examples/server_side/ids.html我明白了,如果我每行都传递一个DT_RowId“列”,它应该自动执行。
我正在使用他们在此提供的示例PHP:http://datatables.net/release-datatables/examples/data_sources/server_side.html
我创建了一个MySQL视图,它有一个动态表,它将表索引转换为名为DT_RowId的列,并添加到$ aColumns变量中,以便在JSON中输出。
该值以JSON格式打印,但没有任何反应。我99%肯定这是因为他们提供的PHP代码不会回显列的名称
在示例中,JSON应为:
"aaData": [
{
"0": "Gecko",
"1": "Firefox 1.0",
"2": "Win 98+ / OSX.2+",
"3": "1.7",
"4": "A",
"DT_RowId": "row_7",
"DT_RowClass": "gradeA"
}, { ... }
但PHP输出无密钥
"aaData": [
{
"Gecko",
"Firefox 1.0",
"Win 98+ / OSX.2+",
"1.7",
"A",
"row_7",
"gradeA"
}, {...}
看到我认为“客户端javascript应该如何知道行中的最后一列是DT_RowId?”。所以我编辑了PHP,用他们的例子中的关键数据输出JSON,然后我得到:
{
"sEcho": 1,
"iTotalRecords": "4",
"iTotalDisplayRecords": "4",
"aaData": [
{
"Nombre": "Some Name",
"username": "some username",
"Email": "some email",
"lastModified": "0000-00-00 00:00:00",
"lastLogin": "2012-02-23 12:04:55",
"rolname": "Some string",
"DT_RowId": "2"
}, {...},{...},{...} ] }
但我收到一条警告说“ DataTables警告:请求未知参数'0'构成第0行的数据源”
我的JSON格式与他们相似,我正在使用
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "scripts/id.php"
所以我不知道为什么它不是DataTable渲染的有效JSON。我可能会错过一些愚蠢的东西,但我被困在这里。
感谢您的帮助
答案 0 :(得分:1)
我知道这已经过时了,但是我已经破解了这个问题,没有任何疯狂的jS代码或服务器端脚本。在使用“columns”功能键入之后,您必须为列命名:
var meowTable = $('#meow').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "get_meow_table.php",
"columns": [ //needed for when you have keys with JSON
{ "data": "meow" },
{ "data": "woof" },
{ "data": "moo" },
{ "data": "cluck" }
]
});
快乐的数据表......
答案 1 :(得分:0)
您称为“无密钥”的aaData是无效的json。 {}
应为数组括号[]
。我撤回了我的评论,除了括号问题
答案 2 :(得分:0)
我为愚蠢分配的空值得到了同样的错误。这是我错误的回应:
{"aaData": [
null,
{
"0": "Gecko",
"1": "Firefox 1.0",
"DT_RowId": "row_7",
"DT_RowClass": "gradeA"
}, { ..row2.. }
]}
印制:
echo json_encode($out);
这就是我建立回应的方式:
function dittaInfoTable($db, $id) {
$ret['aaData'][]=null; <-- wrong line to correct in $ret['aaData']=null;
$res=$db->getA($id,$db->getTabDoc(),'id_ditta');
$line=count($res);
for($i=0;$i<$line;$i++){
$row=array();
$col=count($res[$i]);
for ( $j=0 ; $j<$col ; $j++ ){
if($j == $col - 1)
$row['DT_RowId']= 'row_'.$res[$i][$j];
else
$row[] = $res[$i][$j];
}
$ret['aaData'][]=$row;
}
return $ret;
}
这里我是如何从db获取数据的:
private function queryNotAss($sql){
$this->last_sql=$sql;
$arr=array();
$r = mysqli_query($this->link,$sql);
for ($i=0; $i<mysqli_num_rows($r);$i++)
$arr[$i]=mysqli_fetch_row($r);
return $arr;
}
所以是的,你的json响应中有一个糟糕的json行元素。
答案 3 :(得分:0)
这是我的方式:
/**
* Output
*/
$output = array(
"sEcho" => intval($input['sEcho']),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iFilteredTotal,
"aaData" => array(),
);
while ( $aRow = $rResult->fetch_assoc() ) {
$row = array();
$row['DT_RowId'] = $aRow['id'];
for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
if ( $aColumns[$i] == 'version' ) {
// Special output formatting for 'version' column
$row[] = ($aRow[ $aColumns[$i] ]=='0') ? '-' : $aRow[ $aColumns[$i] ];
} elseif ( $aColumns[$i] != ' ' ) {
// General output
$row[] = $aRow[ $aColumns[$i] ];
}
}
$output['aaData'][] = $row;
}
echo json_encode( $output );