2012-02-29 11 views
1

私は自動的に各行にidを挿入するDataTableをレンダリングしようとしています。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

は私がDT_RowIdという名前の列にテーブルインデックスをオンに動的テーブルを持っているMySQLのビューを作って、それを出力して$ aColumns変数に追加しましたJSONで

値はJSONに出力されますが、何も起こりません。私は、JSONがあるべきそれらが提供するPHPコードは、例では、列

の名前をエコーし​​ないからだと99%確信している:

"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ですか?だから私は、彼らの例のように、キーデータをJSON出力にPHPを編集し、私が取得:

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

が、私は「のDataTableの警告という警告を取得:要求された未知パラメータを 『0』のデータソースを構成します行0は「

私のJSONは彼らのようにフォーマットされており、私はそれをレンダリングするのDataTableのために有効なJSONではありませんなぜ私にはわからない

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

を使用しています。私は何か愚かな行方不明かもしれないが、私はここで立ち往生している。あなたは「キーレス」と呼んで任意のヘルプ

答えて

0

私は愚かに割り当てられたヌル値に対して同じエラーを受けました。これは間違った応答鉱山だった:

によって印刷さ
{"aaData": [ 
    null, 
    { 
     "0": "Gecko", 
     "1": "Firefox 1.0", 
     "DT_RowId": "row_7", 
     "DT_RowClass": "gradeA" 
    }, { ..row2.. } 
]} 

echo json_encode($out); 

これは私が応答をcustruct方法です:私は、DBからデータを取得する方法

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

そして、ここで:

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()と[{} {}]構造体によって自動的に行われます。ドキュメントで提供されているJSONの例と同じです。 – Juan

+0

{}間のオブジェクト表記{ foo ":" bar "}。 jsonlint.comを使用していない場合、それは最終的にjsonが – charlietfl

+0

を検証する究極の方法です。実際にはPHPが1行を出力し、jsonlint.comを使用してここに貼り付けてからprecomifyして、 – Juan

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); 
関連する問題