DataTables服务器端个别列过滤

4
我希望有人能帮我解决这个问题。我已经为此苦苦挣扎了很久。
我的情况是,我加载了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”,但我没有看到它执行更多数据的服务器调用。此时,除了默认搜索框之外,我没有看到任何其他执行服务器调用的方法,也没有看到知道搜索是哪一列的方法。

有人能帮助我并指点我正确的方向吗?


首先,让我欢迎您来到Stackoverflow! 其次,我会向您介绍一篇关于“如何在SO上提出完美问题”的好文章,最后,我想请问您能否发布一下您正在使用的jQuery和数据库调用(无论是外部php脚本还是在jQuery中)。希望我们能够帮助到您... =) - David Thomas
你是使用“搜索全部”功能还是单列搜索?对于“搜索全部”,您将需要编写代码来搜索两个不同表中的每一列。如果是列搜索,您可以将sSearch_x(x = 列索引通常)与您的列索引匹配。 - DarrellNorton
我正在使用开箱即用的“搜索全部”功能。我不知道如何设置单列搜索,我很想让它工作起来。你怎么设置呢? - ackerchez
2个回答

2
如果您使用DataTables插件从服务器获取数据,必须将bServerSide设置为true,将sAjaxSource设置为适当的URL,并在必要时配置fnServerData来进行任何回调。
如果您使用服务器端处理,所有排序、过滤和分页都需要由服务器处理。如果正确配置DataTables,它会在每次分页、过滤或排序事件发生时从服务器请求数据。 DataTables server-side API documentation PHP example of server-side processing

1

为了方便那些参考此问题的所有人,这里是我所实现的内容。

客户端(JavaScript)

按下回车键时执行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接