如何将额外的参数传递给jQuery DataTable的ajax调用?

12
当加载 jQuery DataTable 时,我有如下代码。如何传递额外的参数给 AJAX 调用?下面的问题和答案中建议使用的 fnServerParams 回调函数不起作用。也就是说,简单地使用 aodata.push() 会导致 "push 未定义"(因为 aodata 确实不是数组)。那么正确的方法是什么? 相关问题: 代码:
self.dataTable = self.dataTableContainer.DataTable({
            "autoWidth": false,
            "bSort": false,
            "displayStart": 0,
            "paging": false,
            "lengthChange": false,
            "processing": true,
            "serverSide": true,
            "dom": "<'dataTables_header dashboard_alert_history__alertHeader'i>",
            "ajax": {
                url: getDataUri,
                error: onError,
                cache: false,
                "fnDrawCallback": onTableDrawn,
            },
            "fnDrawCallback": onTableDrawn,
            "language": {
                "info": resources.alarmHistory,
                "infoEmpty": resources.alarmHistory,
                "infoFiltered": ''
            },
            "columns": [
                {
                    "data": "timestamp",
                    "mRender": function (data) {
                        return IoTApp.Helpers.Dates.localizeDate(data, 'L LTS');
                    },
                    "name": "timestamp"
                },
                {
                    "data": "deviceId",
                    "mRender": function (data) {
                        return htmlEncode(data);
                    },
                    "name": "deviceId"
                },
                {
                    "data": "ruleOutput",
                    "mRender": function (data) {
                        return htmlEncode(data);
                    },
                    "name": "ruleOutput"
                },
                {
                    "data": "value",
                    "mRender": function (data) {
                        return htmlEncode(IoTApp.Helpers.Numbers.localizeFromInvariant(data));
                    },
                    "name": "value"
                },
            ],
            "columnDefs": [
                {
                    "targets": [0, 1, 2, 3],
                    "className": 'table_alertHistory_issueType',
                    "width": "20%"

                }
            ],
        });
1个回答

39

我没有仔细阅读文档。在1.9版本及更早版本中,fnServerParams回调现已成为遗留的。在最新版本的 DataTables 中,您需要使用ajax数据参数,如DataTables文档所述。在下面的示例中,将mykey附加到d对象即可解决问题:

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

太棒了!这正是我在寻找的。感谢你的好回答! - iconique
如何在已初始化的数据表上执行此操作? - Sandeep Balagopal
@SandeepBalagopal 这对我来说已经是很多年前的事了,但我认为这是一个不同的问题。你正在问,“加载完表格后如何操作它?”或者更可能的是,你想要捕获ajax promise并在显示数据之前操作它。 - Brett
我想在 AJAX URL 初始化后传递额外的参数。发现我必须销毁表格并重新创建它才能实现这一点。 - Sandeep Balagopal
@SandeepBalagopal,我仍在寻找类似问题的答案,链接在这里https://stackoverflow.com/questions/67376953/jquery-datatable-update-request-postdata-on-datatable-reload?noredirect=1#comment119092423_67376953。 如果您有解决方案,请帮助我。 - BetterLateThanNever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接