2012-02-29 97 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);