使用其他参数更新服务器处理的DataTables源

我正在尝试在单击“ 提交”输入按钮时将其他参数(所选复选框列表)传递给服务器处理的DataTables表#my_table

截图

这可能意味着我必须将my_table.sAjaxSource设置为后端脚本以及已编辑的复选框列表,然后调用my_table.fnDraw()

我准备了一个非常简单的测试用例 – test.php

 

index.html

    @import "/css/demo_table_jui.css"; @import "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/redmond/jquery-ui.css";  ; ;   $(function() { my_table = $('#my_table').dataTable( { bJQueryUI: true, bServerSide: true, bProcessing: true, sAjaxSource: '/test.php' } ); }); var my_table; function redrawTable() { var str = ''; var boxes = new Array(); //loop through all checkboxes $(':checkbox').each(function() { if ($(this).is(':checked')) { boxes.push($(this).attr('name') + '=' + $(this).val()); } }); str = '/test.php?' + boxes.join('&'); // TODO: set my_table.sAjaxSource to str my_table.fnDraw(); }    

Select fruit:

Select candy:

Column_1 Column_2 Column_3

请告诉我,如何实现这一点(将自定义参数传递给DataTables AJAX源脚本)。

更新:感谢Nicola,这段代码似乎对我有用

    @import "/css/demo_table_jui.css"; @import "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/redmond/jquery-ui.css";      var my_table; $(function() { my_table = $('#my_table').dataTable( { bJQueryUI: true, bServerSide: true, bProcessing: true, sAjaxSource: '/test.php', fnServerParams: function ( aoData ) { $(':checkbox').each(function() { if ($(this).is(':checked')) { aoData.push( { name: $(this).attr('name'), value: $(this).val() } ); } }); } }); });    

Select fruit:

Select candy:

Column_1 Column_2 Column_3

在error_log中我看到:

 QUERY_STRING: sEcho=2& iColumns=3& sColumns=& iDisplayStart=0& iDisplayLength=10& mDataProp_0=0& mDataProp_1=1& mDataProp_2=2& sSearch=& bRegex=false& sSearch_0=& bRegex_0=false& bSearchable_0=true& sSearch_1=& bRegex_1=false& bSearchable_1=true& sSearch_2=& bRegex_2=false& bSearchable_2=true& iSortingCols=1& iSortCol_0=0& sSortDir_0=asc& bSortable_0=true& bSortable_1=true& bSortable_2=true& fruits=apple& fruits=banana& candy=toffee& candy=fudge& _=1317666289823 

从这个例子中可以看出,你应该使用fnServerParams:

 "fnServerParams": function ( aoData ) { aoData.push( { "name": "more_data", "value": "my_value" } ); } 

其中aoData是要发送到服务器的对象数组