【问题标题】:Datatables: How to reload server-side data with additional params数据表:如何使用附加参数重新加载服务器端数据
【发布时间】:2013-08-18 12:32:30
【问题描述】:

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

我不知道如何使用数据表 API 获取原始初始化参数。我原以为我可以获取对该对象的引用,使用 fnSettings 获取设置,然后将这些设置传递给一个新的数据表实例,如下所示:

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();

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

【问题讨论】:

  • 你有没有想过这个问题?我遇到了类似的问题。
  • @Voodoo,请看下面我的回答

标签: datatables


【解决方案1】:

终于使用 fnServerParams 让它工作了。请注意,我正在使用 url var 对象删除不必要的参数并添加新参数:

    "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]} );
        }
    }

【讨论】:

    【解决方案2】:

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

    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 });
    

    您可以在TableTools 插件中看到一些示例用法。

    但我不确定这是您需要的... :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2014-05-31
      • 2016-04-23
      • 2014-12-06
      • 1970-01-01
      相关资源
      最近更新 更多