#javascript #jquery #json #datatables
#javascript #jquery #json #таблицы данных
Вопрос:
Я использую IgnitedDatatables (библиотека CodeIgniter) для таблиц данных. Таблица генерируется без проблем, но если я выполняю поиск / фильтрацию, она может фильтровать только один столбец за раз. Если я установлю для «bServerSide» значение false, это сработает, но тогда я потеряю функциональность на стороне сервера.
В приведенных примерах это работает: http://datatables.net/release-datatables/examples/ajax/custom_data_property.html
хотя это не так (на стороне сервера): http://datatables.net/release-datatables/examples/data_sources/server_side.html
Разве этого невозможно достичь при запуске на стороне сервера?
Это мой ответ JSON (сокращенный и с замененными данными):
{"sEcho":0,"iTotalRecords":45438,"iTotalDisplayRecords":45438,"aaData":[["abc","12345","example@example.com","","","2010-01-27 22:31:10","Edit</a> Delete</a>"],["abc2"," test123","test@test.com","","","2008-06-15 22:09:33","Edit</a> Delete</a>"]],"sColumns":"fname,lname,email,phone,cellphone,created,edit"}
Код JavaScript:
$("#members").dataTable( {
"bProcessing": true,
"bServerSide": true,
'sAjaxSource': '<?php echo base_url();?>members/listener',
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.ajax( {
"dataType": 'json',
"type": 'POST',
"url": sSource,
"data": aoData,
"success": fnCallback
} );
},
"bLengthChange": false,
"aaSorting": [[ 0, "asc" ]],
"iDisplayLength": 15,
"sPaginationType": "full_numbers",
"bAutoWidth": false,
"aoColumnDefs": [
{ "sName": "fname", "aTargets": [ 0 ] },
{ "sName": "lname", "aTargets": [ 1 ] },
{ "sName": "email", "aTargets": [ 2 ] },
{ "sName": "phone", "sWidth": "80px", "aTargets": [ 3 ] },
{ "sName": "cellphone", "sWidth": "100px", "aTargets": [ 4 ] },
{ "sName": "created", "sWidth": "120px", "aTargets": [ 5 ] },
{ "bSortable": false, "sName": "edit", "sWidth": "115px", "aTargets": [ 6 ] }
]
});
Спасибо!
Ответ №1:
Ну, проблема, если вы фильтруете на стороне сервера, заключается в том, что вы фильтруете через SQL-запрос, и это то, что написано в примере, который вы опубликовали;
- Фильтрация
- Обратите внимание, что это не соответствует встроенной фильтрации таблиц данных, которая выполняет это
- слово за словом в любом поле. Это возможно сделать здесь, но беспокоит эффективность
- в очень больших таблицах, а функциональность регулярных выражений MySQL очень ограничена
В принципе, вы могли бы делать то, что хотите (регулярное выражение соответствует всем столбцам), но это приведет к снижению производительности на стороне сервера.
Обычно я предоставляю фильтр для каждого столбца, который мне нужно отфильтровать.