2012-02-29 84 views
1

我想呈现一个DataTable,它会自动插入和ID到每一行。Datatables服务器端自动行ID

根据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" 
     }, {...},{...},{...} ] } 

,但我得到一个警告说“数据表警告:请求的未知参数‘0’构成的数据源行0

我的JSON格式是像他们那样,我使用

"bProcessing": true, 
"bServerSide": true, 
"sAjaxSource": "scripts/id.php" 

,所以我不知道为什么它不是一个有效的JSON的数据表来呈现。我可能会错过一些愚蠢的东西,但我被困在这里。

感谢所有帮助

回答

0

我得到了相同的错误愚蠢地分配一个空值。这是我的错误响应:

{"aaData": [ 
    null, 
    { 
     "0": "Gecko", 
     "1": "Firefox 1.0", 
     "DT_RowId": "row_7", 
     "DT_RowClass": "gradeA" 
    }, { ..row2.. } 
]} 

通过印刷:

echo json_encode($out); 

我这是怎么custruct响应:

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响应中的元素。

0

的aaData你提到的“钥匙”是无效的JSON。 {}应该是数组括号[]。我收回了我的意见,数据格式正确,除了括号问题

+0

你确定吗?我不是做任何括号或大括号,它是由json_encode(自动完成)和[{} {}]结构它是相同的,因为它们的文档 – Juan 2012-02-29 16:54:53

+0

在{}应该对象符号{“之间提供JSON示例富 “:” 酒吧“}。如果你还没有使用jsonlint.com,它是终极的JSON验证 – charlietfl 2012-02-29 17:00:26

+0

实际PHP输出一行,使用jsonlint.com这里粘贴之前,美化它,如果你的意思是{...}这就是我这验证 – Juan 2012-02-29 17:28:42

1

我知道这是旧的,但我已经破解了这个螺母,没有任何疯狂的jS代码或服务器端脚本的东西。与 “列” 功能键控这样后您必须命名的列:

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" } 
     ] 
}); 

快乐datatable'ing ...

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);