我希望有人可以帮助我。我一直在为此疯狂。
我有一种情况,我加载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 :(得分:2)
如果要从服务器获取DataTables插件的数据,则必须将bServerSide设置为true,将sAjaxSource设置为适当的URL,如果需要进行任何回调,最好配置fnServerData。
如果使用服务器端处理,则需要在服务器上处理所有排序,过滤和分页。如果正确配置DataTables,它将在发生分页,过滤或排序事件时从服务器请求数据。
答案 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