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”,但我没有看到执行服务器调用更多的数据。在这一点上,除了默认搜索框外,我没有看到任何其他方式执行服务器调用,并且我知道某种方式可以知道搜索的是哪一列。
有人可以帮助我,并指出我在正确的方向吗?
如果您从DataTables插件的服务器获取数据,则必须将bServerSide设置为true,将sAjaxSource设置为适当的URL,并且如果需要执行任何回调,则理想地配置fnServerData。
如果使用服务器端处理,则需要在服务器上处理所有排序,筛选和分页。如果您正确配置DataTable,那么只要有分页,过滤或排序事件,就会从服务器请求数据。
这应该被标记为答案^ – 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
首先,请允许我欢迎你的*!其次,我会告诉你一篇关于'[如何提出完美问题](http://tinyurl.com/so-hints/)'的文章',最后,我会问你是否可以发布你正在使用的jQuery和数据库调用(无论是外部php脚本还是jQuery本身)。希望我们能够帮助您... =) – 2010-12-20 18:16:20
您是使用“全部搜索”功能还是单列搜索?对于全部搜索,您将不得不编写代码来在两个不同的表中搜索每一列。如果是列搜索,则可以匹配列索引中的sSearch_x(通常为x列索引)。 – DarrellNorton 2010-12-20 18:40:33
我使用的是“全部搜索”功能。我不知道如何设置单列搜索,我很想得到这个工作。你如何设定? – ackerchez 2010-12-20 18:47:28