DataTables服务器端单独列过滤

问题描述:

我希望有人可以帮助我。我一直在用这个疯狂地发疯。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”,但我没有看到执行服务器调用更多的数据。在这一点上,除了默认搜索框外,我没有看到任何其他方式执行服务器调用,并且我知道某种方式可以知道搜索的是哪一列。

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

+0

首先,请允许我欢迎你的*!其次,我会告诉你一篇关于'[如何提出完美问题](http://tinyurl.com/so-hints/)'的文章',最后,我会问你是否可以发布你正在使用的jQuery和数据库调用(无论是外部php脚本还是jQuery本身)。希望我们能够帮助您... =) – 2010-12-20 18:16:20

+0

您是使用“全部搜索”功能还是单列搜索?对于全部搜索,您将不得不编写代码来在两个不同的表中搜索每一列。如果是列搜索,则可以匹配列索引中的sSearch_x(通常为x列索引)。 – DarrellNorton 2010-12-20 18:40:33

+0

我使用的是“全部搜索”功能。我不知道如何设置单列搜索,我很想得到这个工作。你如何设定? – ackerchez 2010-12-20 18:47:28

如果您从DataTables插件的服务器获取数据,则必须将bServerSide设置为true,将sAjaxSource设置为适当的URL,并且如果需要执行任何回调,则理想地配置fnServerData。

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

DataTables server-side API documentation

PHP example of server-side processing

+0

这应该被标记为答案^ – Marc 2013-10-04 09:53:00

对于所有谁也参照这一问题的好处,这里是我已经实现。

客户端(JavaScript)

,按Enter键执行fnFilter。

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

服务器端(红宝石)

找到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