如何在DataTables中动态设置ajax数据?

时间:2017-06-28 13:34:19

标签: jquery ajax datatables

我正在使用DataTables 1.10.15并已阅读有关如何在ajax调用中指定data属性的内容,如下所示:

$(document).ready(function() {
    var MyTable = $('#example').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "scripts/server_processing.php",
            "data": function ( d ) {
                d.myKey = "myValue";
                // d.custom = $('#myInput').val();
                // etc
            }
        }
    } );
} );

但是,此示例只包含硬编码值(或形成输入值,如$('#myInput').val())。

我有一个应用程序,我需要能够传递各种不同的数据对象,然后运行ajax调用。

我看不出这是怎么可能的,并查看了以下https://datatables.net/examples/server_side/custom_vars.html

我想这样做的原因是因为我正在使用几种不同的形式构建应用程序。我需要选择哪个表单作为数据发送!当用户以特定形式输入术语时,我想将那个表单数据传递给我的ajax脚本,然后让DataTables重绘表格(我可以使用.draw()方法):

MyTable.draw();

但是,我不明白如何动态指定data:中的内容。我可以在ajax调用中执行类似的操作:

"ajax": { 
        "url" : "scripts/server_processing.php",
        "data" : function ( d ) {
            d.primarySearch = $('#form1').serialize(),
            d.secondSearch = $('#form2').serialize(),
            d.thirdSearch = $('#form3').serialize(),
        }
    }

但是,如果我正在进行搜索的数据位于#form1,我只想传递该数据,而不是来自#form2#form3的数据。但由于每次都有所不同,我需要能够说出要传递给data:对象的表单。

2 个答案:

答案 0 :(得分:1)

我也在使用服务器端处理。 您可以按以下代码调用它:

  

这是针对静态表单ID

  ajax: {
            "url": 'api/v1/datatable/' + method,
            "type": "POST",
            "data": jQuery('#frmid').serialize(),
        },
  

这适用于动态表单ID

var form_id = 'form1' ;

$(document).ready(function() {
    var MyTable = $('#example').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "scripts/server_processing.php",
            "data": jQuery('#' + form_id).serialize(),
        }
    } );
} );

$(document).on('keyup','.search_text',function(){

    form_id = $(this).closest('form').attr('id');
    MyTable.draw(); 
})

希望这对你有所帮助。

答案 1 :(得分:-1)

如果您只需要稍后在代码中更改数据表的ajax初始URL,则可以使用:

tbl.ajax.url("new url");

API Documentation