如何使用数据表和服务器端处理进行自定义筛选

时间:2012-11-30 11:26:55

标签: jquery datatables

我正在使用Datatables在我的Web应用程序中显示表格数据,并将其配置为使用server-side processing,即通过AJAX查询服务器以获取过滤数据。我想根据特定于我的应用程序的其他参数进行过滤,即对应于某些用户选项(例如,通过UI中的复选框)。如何使DataTables将这些额外的过滤器参数传递给服务器?

5 个答案:

答案 0 :(得分:16)

此答案针对版本1.10.6进行了更新

现在可以使用ajax选项完成此操作。

示例代码

 $table.dataTable({
            "ajax":  {
                "url": "example.com/GetData",
                "type": "POST",
                "data": function(d) {
                    d.Foo = "bar";
                    d.Bar = "foo";
                    d.FooBar = "foobarz";
                }
            },
            "serverSide":true,
        });

Foo,Bar和FooBar将作为表格数据发布,作为附加参数以及其他现有参数,如 draw,start,length,等,因此根据您的服务器端语言,您可以相应地阅读它们。

在现实生活中,你可能会有一个搜索按钮和一些输入,你可以通过调用来触发过滤过程

        var table = $table.DataTable();
        table.ajax.reload(); 

单击按钮时。

答案 1 :(得分:15)

解决方案是使用DataTables的fnServerParams选项,它允许您添加要在发送到服务器的XMLHttpRequest中发送的自定义参数。例如:

$(document).ready(function() {
  $('#example').dataTable({
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "/IndexXhr",
    "fnServerParams": function (aoData) {
        var includeUsuallyIgnored = $("#include-checkbox").is(":checked");
        aoData.push({name: "includeUsuallyIgnored", value: includeUsuallyIgnored});
    }
  });
});

答案 2 :(得分:4)

最后在花了几个小时后做到了!

我会在这里发布完整的方法,为大家提供帮助。

需要使用fnServerParams选项,该选项允许添加要在发送到服务器的XMLHttpRequest中发送的自定义参数。例如:

这是我用过的coffescript:

jQuery ->
  table = $('#logs').dataTable
    bProcessing: true
    bServerSide: true
    sAjaxSource: $('#logs').data('source')
    fnServerParams: (aoData) ->
      applicationName = $("#applicationName").val()
      aoData.push
        name: "applicationName"
        value: applicationName

      return

  $("#applicationName").on "change", ->
    table.fnDraw()
    return

我的HTML文件包含ID为applicationName的输入元素。请注意我在输入值更改时用于启用重绘请求的fnDraw()元素。

答案 3 :(得分:0)

这对我有用



$(document).ready(function() {
     table = $('#okmorders').DataTable( {
        // "ajax": 'http://cdpaha2.dev/admin/organizations/okm_orders'
				serverSide: true,
				"paging":   true,
				"searching":  false ,
        // "info":     false,
        "bLengthChange": false,
        // "iDisplayLength":50,
        // "aaSorting": [],
        // "oLanguage": { "sEmptyTable": "No orders present " } ,
        "aoColumnDefs" : [
          { 'bSortable' : false, 'aTargets' : [ 6 ]}
				],

			// 	"fnServerParams": function (aoData) {
			// 		 aoData.push({name: "includeUsuallyIgnored"});
			//  },
				ajax: {
		        url: 'yoururl.json' ,
		        type: 'POST',
						data:
						{
							'startDate':function(){return $("#startDate").val(); },
							'endDate': function(){return $("#endDate").val(); } ,
							'placedBy':function(){return $("#placedBy").val(); },
							'customer_po': function(){return $("#customer_po").val(); } ,
							'customer_ref': function(){return $("#customer_ref").val(); }
						}
    },
    } );




答案 4 :(得分:0)

动态参数,这对我有用,似乎是最佳解决方案

t = $("#tbl_SearchCustomer").DataTable({
    processing: true,
    serverSide: true,
    info: true,
    ajax: {
        url: '../Data/SearchCustomer',
        data: function (data) {
            data.CustomerCategoryID = $("#CustomerCategoryID").val(); // dynamic parameter
            delete data.columns;
        }
    },
    deferRender: true,
    columns: [
        { "data": "FullName" },            
    ],       
    dom: 'lfrtip'
});