首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带参数的DataTables ajax.reload()

带参数的DataTables ajax.reload()
EN

Stack Overflow用户
提问于 2017-02-23 10:18:58
回答 4查看 24.2K关注 0票数 8

我在一个DataTables项目中使用serverSide

我试图在进行更改后重新加载表,而这些更改希望通过AJAX在POST中作为参数传递。

问题是,DataTables总是从初始化中获取options对象,而不是使用新参数的更新版本。

所以,我需要的是,使用传递一组新参数的ajax.reload()

这是我目前的职能:

代码语言:javascript
运行
复制
filterData(tableParams) {
    console.log('reloading DT. tableparams received are: ' + JSON.stringify(tableParams));

    let element = $(this.el.nativeElement.children[0]);
    let table = element.find('table.dataTable');
    table.DataTable().ajax.reload();
}

现在,正如您所看到的,我没有使用tableParams,这是因为我想展示我的函数的一个干净的版本,我尝试了很多东西,但它们都没有工作。

options DataTables总是获得带有初始参数的初始对象

这是我绝望的尝试之一:

代码语言:javascript
运行
复制
filterData(tableParams) {
    let element = $(this.el.nativeElement.children[0]);
    let table = element.find('table.dataTable');
    table.DataTable({
        ajax: {
            url: this.jsonApiService.buildURL('/test_getUsers.php'),
            type: 'POST',
            data: tableParams,
        },
    }).ajax.reload();
}

如果能提供一些帮助,我将不胜感激。如果您需要进一步解释DataTable是如何创建的,或者更多的代码片段,请告诉我。但我认为问题只是与ajax.reload()函数有关,能够发送更新的参数将解决这个问题。

非常感谢!

编辑1

这是我的init options对象:

代码语言:javascript
运行
复制
            let data = {
                email: true,
                test: 'init',
            };

            this.options = {
                dom: 'Bfrtip',
                processing: true,
                serverSide: true,
                pageLength: 20,
                searchDelay: 1200,
                ajax: {
                    url: this.jsonApiService.buildURL('/test_getUsers.php'),
                    type: 'POST',
                    data: data,
                },
                columns: [
                    {data: 'userId'},
                    {data: 'userCode'},
                    {data: 'userName'},
                    {data: 'userRole'},
                    {data: 'userEmail'},
                ],
            };

这些是DataTables正在发送的参数:

(除其他DataTables参数外)

当我调用ajax.reload()时,无论我尝试了什么,我最终都会发送这些相同的参数,因此,发送init参数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-24 10:00:16

我终于找到了解决方案,问题是我太专注于通过DataTable().ajax.reload()来实现我的目标。我想以这样或那样的方式传递参数,这是不正确的。

我不得不更改options对象的构造。正如您在前面看到的,我将自定义参数分配给options对象,如下所示:

代码语言:javascript
运行
复制
ajax: {
  url: this.jsonApiService.buildURL('/test_getUsers.php'),
  type: 'POST',
  data: this.params,
}

在我的例子中,data: this.params将从某个地方获取数据,我有两个监听器,一个用于init,另一个用于更新更改的this.params值。这不是监听器,而是onChange(),但的重点是参数在运行时中发生变化。

因此,我只需将其放入函数中,并将DataTable的参数合并到我自己的参数中。

这是我的解决方案:

代码语言:javascript
运行
复制
data: function (d) {
    Object.assign(d, myClass.params);
    return d;
}

对于这个options对象,当我必须刷新向服务器发送新参数的DataTable时,我只需调用ajax.reload()。DataTables将使用最新的data获取options对象,并重新加载自身。

我真希望这能帮到别人!良好的工作和愉快的编码!

票数 16
EN

Stack Overflow用户

发布于 2018-10-31 12:23:37

在某些情况下,您可能希望在运行时更改ajax url或应用任何附加的查询参数.

所以你可以这样做:

代码语言:javascript
运行
复制
var dataTable = $('#example').DataTable({...});    
dataTable.ajax.url('/new-ajax-url?someParam=1').load();

它与库的v1.10.16版本一起工作。

票数 10
EN

Stack Overflow用户

发布于 2019-08-07 23:04:20

代码语言:javascript
运行
复制
$('#example').dataTable({
  "ajax": {
    "url": "data.json",
    "data": function (d) {
        d.extra_search = $('#extra').val();
    }
  }
});

然后只需打电话:

代码语言:javascript
运行
复制
table.ajax.reload();
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42412845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档