Datatables на стороне сервера автоматический идентификатор строки - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь отобразить 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 View, чтобы иметь динамическую таблицу, которая превращает индекс таблицы в столбец с именем 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"

, поэтому я не знаю, почему это недопустимый JSON для DataTable для рендеринга. Возможно, я упускаю что-то глупое, но я застрял здесь.

Спасибо за любую помощь

Ответы [ 4 ]

1 голос
/ 17 мая 2015

Я знаю, что это старый, но я взломал этот гвоздь без какого-либо сумасшедшего кода 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" }
        ]
});

Happy datatable'ing ...

0 голосов
/ 26 ноября 2015

вот мой путь:

/**
 * 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 );
0 голосов
/ 08 октября 2013

Я получил ту же ошибку для тупо назначенного нулевого значения.Это был мой неправильный ответ:

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

А вот как я получаю данныеиз базы данных:

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 голосов
/ 29 февраля 2012

aaData, который вы называете "keyless", является недействительным json.{} должно быть в скобках [].Я отозвал свой комментарий, что данные были отформатированы правильно, за исключением проблемы скобок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...