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”,但我没有看到执行服务器调用以获取更多数据。在这一点上,除了默认搜索框之外,我没有看到任何其他执行服务器调用的方法,并且我看到了一些知道搜索是针对哪一列的方法。

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

4

2 回答 2

2

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

如果您使用服务器端处理,则所有排序、过滤和分页都需要由您在服务器上处理。如果您正确配置 DataTables,它将在任何时候发生分页、过滤或排序事件时从服务器请求数据。

DataTables 服务器端 API 文档

服务器端处理的PHP示例

于 2010-12-20T18:38:13.547 回答
1

为了所有会提到这个问题的人的利益,这就是我已经实现的。

客户端 (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
于 2014-02-21T08:06:28.347 回答