【问题标题】:How do you dynamically set ajax data in DataTables?如何在 DataTables 中动态设置 ajax 数据?
【发布时间】:2017-06-28 13:34:18
【问题描述】:

我正在使用 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

我想这样做的原因是因为我正在构建一个具有几种不同形式的应用程序。我需要选择哪个表单作为数据发送!当用户在特定表单中输入术语时,我想将 that 表单数据传递给我的 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: 对象。

【问题讨论】:

    标签: jquery ajax datatables


    【解决方案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(); 
    })
    

    希望这对你有帮助。

    【讨论】:

    • 感谢您的帮助。我已经明白了,但问题是如果你有几个表格怎么办?如果您想将#form1 中的所有字段和另一次#form2 中的所有字段发送到ajax 脚本怎么办?
    • @Andy,这对你有帮助吗?
    • 是的,但是你如何/在哪里传递form.id动态?这就是整个问题。在 DataTables 中,您不能多次初始化它,因此对不同的表单重复 $('#example').DataTable 部分将不起作用。这是我遇到的问题 - 我无法以可以动态设置的方式将任何内容传递给 .DataTable 初始化。我将更新我必须更清楚地显示问题的代码。
    • @Andy,您正在单击任何按钮来搜索数据?
    • 不,它适用于keyup 事件。但是,如果您可以发布与按钮一起使用的内容,我可能会对其进行调整。
    【解决方案2】:

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

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

    API Documentation

    【讨论】:

    • 已经回答了,这实际上与问题无关。
    • tbl.ajax.url("https://example.com?" + jQuery('#' + form_id).serialize()); 现在有了!
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 2016-07-02
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多