【问题标题】:DataTables Server Side Individual Column FilteringDataTables 服务器端单个列过滤
【发布时间】:2010-12-20 17:55:52
【问题描述】:

我希望有人可以帮助我解决这个问题。我一直为此发疯。

我有一种情况,我加载了 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!其次,我会为您指出一篇关于“how to ask perfect questions on SO”的精彩文章,最后,我会问您是否可以发布您正在使用的 jQuery 和数据库调用(无论是外部 php 脚本还是在jQuery 本身)。希望我们能够帮助您... =)
  • 您使用的是“搜索全部”功能还是单列搜索?对于全部搜索,您必须编写代码来搜索两个不同表中的每一列。如果是列搜索,您可以在列索引上匹配 sSearch_x(通常为 x = 列索引)。
  • 我使用的是开箱即​​用的“搜索全部”功能。我不知道如何设置单列搜索,我很想让它工作。你是怎么设置的?

标签: jquery jquery-datatables


【解决方案1】:

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

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

DataTables server-side API documentation

PHP example of server-side processing

【讨论】:

    【解决方案2】:

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

    客户端 (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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2019-05-25
      • 2011-12-28
      相关资源
      最近更新 更多