Datatables:如何使用附加参数重新加载服务器端数据

Datatables:如何使用附加参数重新加载服务器端数据,datatables,Datatables,我有一个表,它在服务器端获取数据,使用自定义的服务器端初始化参数,这些参数根据生成的报表而异。一旦生成了表,用户可以打开一个弹出窗口,在其中可以添加多个附加过滤器进行搜索。我需要能够使用与原始表相同的初始化参数,并使用fnServerParams添加新参数 我不知道如何使用datatables API获取原始初始化参数。我原以为可以获取对象的引用,使用fnSettings获取设置,并将这些设置传递到新的datatables实例中,如下所示: var oSettings = $('#myTable

我有一个表,它在服务器端获取数据,使用自定义的服务器端初始化参数,这些参数根据生成的报表而异。一旦生成了表,用户可以打开一个弹出窗口,在其中可以添加多个附加过滤器进行搜索。我需要能够使用与原始表相同的初始化参数,并使用fnServerParams添加新参数

我不知道如何使用datatables API获取原始初始化参数。我原以为可以获取对象的引用,使用fnSettings获取设置,并将这些设置传递到新的datatables实例中,如下所示:

var oSettings = $('#myTable').dataTable().fnSettings();
// add additional params to the oSettings object
$('#myTable').dataTable(oSettings);
但是通过fnSettings返回的变量不是我需要的,也不起作用

在这一点上,我似乎要重新构建一些东西,这样我就可以将初始化参数作为变量传递,并根据需要添加参数,除非有人能将我引向正确的方向

编辑: 按照tduchateau下面的回答,我通过使用

var oTable= $('#myTable').dataTable(),
    oSettings = oTable.fnSettings(),
    oParams = oTable.oApi._fnAjaxParameters(oSettings);
oParams.push('name':'my-new-filter', 'value':'my-new-filter-value');
并且可以确认我的新服务器端参数已添加到现有参数上

然而,我还是不太明白

$('#myTable').dataTable(oSettings);
给出了错误:

DataTables warning(table id = 'myTable'): Cannot reinitialise DataTable. 
To retrieve the DataTables object for this table, please pass either no arguments 
to the dataTable() function, or set bRetrieve to true.
Alternatively, to destroy the old table and create a new one, set bDestroy to true.
背景

oTable.bRetrieve = true;
无法消除错误,并且设置

oSettings.bRetrieve = true;
导致表不执行ajax调用。背景

oSettings.bDestroy = true;
设置时丢失所有自定义参数

oTable.bDestroy = true;
返回上述错误。只是打个电话

oTable.fnDraw();

使用原始设置重新绘制表格。

这通常是检索初始化设置的正确方法:

var oSettings = oTable.fnSettings();
为什么它不是你需要的?这些女人怎么了

如果需要根据附加过滤器过滤数据,可以使用以下方法完成发送到服务器的“AJAX数据”数组:

var oTable = $('#myTable').dataTable();
var oParams = oTable.oApi._fnAjaxParameters( oTable );
oParams.push({name: "your-additional-param-name", value: your-additional-param-value });
您可以在插件中看到一些示例用法


但我不确定这是你需要的…:-)

最终使用fnServerParams使其正常工作。请注意,我正在使用url变量对象删除不必要的参数并添加新参数:

    "fnServerParams": function ( aoData ) {
        var l = aoData.length;

        // remove unneeded server params 
        for (var i = 0; i < l; ++i) {

            // if param name starts with bRegex_, sSearch_, mDataProp_, bSearchable_, or bSortable_, remove it from the array
            if (aoData[i].name.search(/bRegex_|sSearch_|mDataProp_|bSearchable_|bSortable_/) !== -1 ){              
                aoData.splice(i, 1);

                // since we've removed an element from the array, we need to decrement both the index and the length vars
                --i;
                --l; 
            }               
        }

        // add the url variables to the server array    
        for (i in oUrlvars) {
            aoData.push( { "name": i, "value": oUrlvars[i]} );
        }
    }
“fnServerParams”:函数(aoData){
var l=aoData.length;
//删除不需要的服务器参数
对于(变量i=0;i
你有没有想过这一点?我遇到了一个类似的问题。@Voodoo,见下面我的答案