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”,但我没有看到执行服务器调用更多数据。 此时,除了默认搜索框之外,我没有看到任何其他方式执行服务器调用,我看到了一些了解搜索所针对的列的方法。

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

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

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

DataTables服务器端API文档

服务器端处理的PHP示例

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

客户端(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