2014-10-15 12 views
0

Поскольку у меня есть более 20k ~ элементов, которые нужно показать в DataTable, я хочу заполнить его в соответствии с некоторыми параметрами, чтобы избежать большого запаздывания.CodeIgniter с DataTables ajax populate

// Clears the DataTable to avoid duplication of items 
$('#contacts-table > tbody').empty(); 
var category_id = 5; // Just for tests 

$.post('ajax_getAll', {category_id: category_id}, function(response){ 

    // I retrieve the 'response' as json_encoded 
    var json = JSON.parse(response); 

}); 

Если бы я не использовали DataTables, традиционным способом, я бы просто сделать (для заполнения tbody):

$.each(json, function(index, item){ 

    var tr = "<tr>"; 
     tr += " <td><input type='checkbox' class='checkbox'/></td>"; 
     tr += " <td>" + item.id + "</td>"; 
     tr += " <td>" + item.name + "</td>"; 
     tr += "</tr>"; 

    $('#contacts-table').prepend(tr); 
}); 

Но этот кусок кода, хотя элементы извлекаются и успешно вставлен в DataTable, функции DataTable (например, переупорядочение, поиск и т. д.) перестают работать, и когда я использую эти функции, он автоматически удаляет всю мою таблицу tbody.

Итак, я немного искал, и обнаружил, что я должен заполнить DataTable, используя Data attribute.

// Since I've initialized the DataTable in the load of the jQuery 
// I must destroy it so I can re-load it again 
$('#contacts-table').DataTable().destroy(); 

$('#contacts-table').DataTable({ 
    'bPaginate': true, 
    'bLengthChange': false, 
    'bFilter': true, 
    'bInfo': true, 
    'bAutoWidth': true, 
    "iDisplayLength": 30, 
    'aoColumnDefs': [{ 
     'bSortable': false, 
     'aTargets': ['nosorting'] 
    }], 
    "aaSorting": [], 
    'data': json, // Here I'm trying to pass the values without any success 
}); 

С последнего кода, я получаю эту ошибку Warning: Request unknown

JSon я получаю от PHP является следующее:

[{"id":"16","name":"just testing"}, {"id":"16","name":"stackoverflow"}] 

Кроме ошибки я получаю Интересно, как Я установил этот tr += " <td><input type='checkbox' class='checkbox'/></td>";, используя DataTables по ajax.

ответ

0

Я только что решил, хотя у меня есть и другие проблемы.

В принципе, мне нужно сделать, помимо настроек dataTable добавить еще несколько параметров, чтобы получить информацию из PHP как ответ json.

$("#contacts-table").dataTable({ 
    // All the properties you want...then in the end 
'serverSide': true, 
'ajax': { 
      'url': 'ajax_getAll', 
      'type': 'POST', 
    }, 
    'columns': [ 
       { 'data': 'id' }, 
       { 'data': 'name' }, 
    ] 
}); 

И ответ PHP JSON должен быть чем-то вроде этого:

$response = array('sEcho' => 5, 
        'iTotalRecords' => 5, 
        'iTotalDisplayRecords' => 5, 
        'aaData' => array(array('id' => 1, 'name' => 'stackoverflow'), 
            array('id' => 2, 'name' => 'google')), 
       ); 
Смежные вопросы