【发布时间】:2021-05-03 23:25:45
【问题描述】:
我有一个在 JS 模块中定义的 JQuery 数据表。而且,在其他地方,我试图在 Datatable 的 ID 选择器的帮助下重新加载它。在这里,我想传入我遇到问题的新请求发布数据。
我的尝试:
在模块 A 中:
$(selectors.Datatable)
.DataTable({
bProcessing: true,
serverSide: true,
ajax: {
data: initialPostData,
url: urls.read,
method: 'POST'
},
columns: [...],
autoWidth: false,
searchDelay: 500
});
在模块 B 中:
var newPostData = [...];
var dataTableWidget = $(selectors.datatableSelector).DataTable();
dataTableWidget.ajax.params(newPostData);
dataTableWidget.ajax.reload();
我期待dataTableWidget.ajax.params(newPostData); 应该在 ajax 请求中发布新数据。但事实并非如此。
更新
params 不会在这里提供帮助。来自文档:
获取上次Ajax请求中DataTables提交给服务器的数据
【问题讨论】:
-
如果您想重新执行 DataTables ajax 请求 - 但使用不同的
data(即作为请求的一部分提交给服务器的数据) - 您必须向ajax.data选项。有一个例子here。请注意该答案中的 warning 与服务器端处理有关,我看到您也在使用它。 (我看到你已经在使用ajax.reload()来触发重新加载。) -
此示例仅在初始加载和重新加载都在同一个模块中时才有效。就我而言,它不是。它们位于两个不同的模块中。
-
它们位于两个不同的模块中 是的,问题中明确说明了这一点。是否有什么东西阻止你的 2 个不同的模块访问一个公共功能?
-
另外(出于好奇),为什么 A 中有
selectors.Datatable,而 B 中有selectors.datatableSelector?这不也是 A 和 B 共同的东西吗?如果我在这里偏离路线,也许minimal reproducible example 将有助于澄清。 -
A 中的 selectors.Datatable 和 B 中的 selectors.datatableSelector 都保存保存值。它们在不同的模块中有不同的名称。获取请求数据的函数在Module B中是紧耦合的,不能导出到一个普通的Module中。
标签: jquery datatables