DataTables服务器端单个列过滤

时间:2010-12-20 17:55:52

标签: jquery jquery-datatables

我希望有人可以帮助我。我一直在为此疯狂。

我有一种情况,我加载DataTables网格(顺便说一句很棒!)一切都很棒。然后我去搜索,我遇到了问题。在网格中填充的数据来自两个不同的数据库表(这很好)但是当有人执行搜索时,我无法知道去哪里获取数据。我需要知道搜索的标准(即标题或联系方式)。我看到当通过默认搜索框从服务器调用搜索时,有些变量如“sSearch_0”都未设置,这些变量是如何设置的?

以下是表格的初始化代码:

oTable = $('#example').dataTable({
"bJQueryUI": true,
"bFilter": true,
"sPaginationType": "full_numbers",
"bPaginate " : true,
"bServerSide" : true,
"sAjaxSource" : "php/tabledata.php",
"aoColumnDefs": [
     { "bSortable": false, "aTargets": [ 0,6,8 ] },
 { "sClass": "tdCenter", "aTargets": [ 0,1,2,3,4,5,6,7,8 ] }
     ],
"fnServerData": function ( sSource, aoData, fnCallback ) {
aoData.push( { "name": "userid", "value": userid } );
$.getJSON( sSource, aoData, function (json) { 
fnCallback(json)
});
}           

});

我已经研究了将数据添加到“fnServerData”的选项,并且实际上将其用于第一次初始化服务器调用,但我不确定如何将其用于后续服务器调用。我曾尝试使用“fnFilter”,但我没有看到执行服务器调用更多数据。此时除了默认搜索框之外,我没有看到任何其他方式执行服务器调用,我看到了一些了解搜索所针对的列的方法。

有人可以帮助我,并指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

如果要从服务器获取DataTables插件的数据,则必须将bServerSide设置为true,将sAjaxSource设置为适当的URL,如果需要进行任何回调,最好配置fnServerData。

如果使用服务器端处理,则需要在服务器上处理所有排序,过滤和分页。如果正确配置DataTables,它将在发生分页,过滤或排序事件时从服务器请求数据。

DataTables server-side API documentation

PHP example of server-side processing

答案 1 :(得分:1)

为了所有提出这个问题的人的利益,这是我实施的内容。

客户端(JavaScript)

按Enter键执行fnFilter。

$(tableId + " thead input").keypress( function () {
  if (event.which == 13) {
    event.preventDefault();
    oTable.fnFilter( this.value, $("thead input").index(this) );
  }
} );

服务器端(Ruby)

找到sSearch_(int)参数哈希,并从密钥中检索列索引。 从数组中获取列名并构建搜索字符串。

def column_search
  search_string = []
  params.keys.map {|x| x if params[x].present? and x.include? "sSearch_"}.compact.each do |search|
    index = search.split("_").last.to_i
    search_string << "#{columns[index]} ilike '%#{params[search]}%'"
  end
  search_string.join(' and ')
end