我在一个DataTables项目中使用serverSide。
我试图在进行更改后重新加载表,而这些更改希望通过AJAX在POST中作为参数传递。
问题是,DataTables总是从初始化中获取options
对象,而不是使用新参数的更新版本。
所以,我需要的是,使用传递一组新参数的ajax.reload()
。
这是我目前的职能:
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总是获得带有初始参数的初始对象。
这是我绝望的尝试之一:
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
对象:
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参数。
发布于 2017-02-24 10:00:16
我终于找到了解决方案,问题是我太专注于通过DataTable().ajax.reload()
来实现我的目标。我想以这样或那样的方式传递参数,这是不正确的。
我不得不更改options
对象的构造。正如您在前面看到的,我将自定义参数分配给options
对象,如下所示:
ajax: {
url: this.jsonApiService.buildURL('/test_getUsers.php'),
type: 'POST',
data: this.params,
}
在我的例子中,data: this.params
将从某个地方获取数据,我有两个监听器,一个用于init,另一个用于更新更改的this.params
值。这不是监听器,而是onChange()
,但的重点是参数在运行时中发生变化。
因此,我只需将其放入函数中,并将DataTable的参数合并到我自己的参数中。
这是我的解决方案:
data: function (d) {
Object.assign(d, myClass.params);
return d;
}
对于这个options
对象,当我必须刷新向服务器发送新参数的DataTable时,我只需调用ajax.reload()
。DataTables将使用最新的data
获取options
对象,并重新加载自身。
我真希望这能帮到别人!良好的工作和愉快的编码!
发布于 2018-10-31 12:23:37
在某些情况下,您可能希望在运行时更改ajax url或应用任何附加的查询参数.。
所以你可以这样做:
var dataTable = $('#example').DataTable({...});
dataTable.ajax.url('/new-ajax-url?someParam=1').load();
它与库的v1.10.16版本一起工作。
发布于 2019-08-07 23:04:20
$('#example').dataTable({
"ajax": {
"url": "data.json",
"data": function (d) {
d.extra_search = $('#extra').val();
}
}
});
然后只需打电话:
table.ajax.reload();
https://stackoverflow.com/questions/42412845
复制相似问题