Data Tables 1.10.18(服务器端模式)和jquery 3.2.1
设置如下:
var bySubstancesTable = $('#bySubstancesTable').DataTable({
processing: true,
serverSide: true,
searching: false,
ajax: {
data: {
list_requested: 'bySubstancesTable', // <table> #ID
keywords: $('#keywords-bysubstancestable').val() // search keywords
},
url: '/get-product-notifications.json',
},
"language": {
...
"processing": 'Loading notifications...'
}
...
});
页面的标记中有一个<input>
,其ID为#keywords-bysubstancestable
,后跟表格的标记:
<input type="text" id="keywords-bysubstancestable">
<table id="bySubstancesTable" class="table display table-striped responsive" cellspacing="0" width="100%">
<thead>
<tr>
<th>Date</th>
<th>ID</th>
<th>Substance Name</th>
<th>Revision</th>
<th>Affected Products</th>
</tr>
</thead>
</table>
在页面加载时,表已正确填充。我正在尝试实现一种自定义搜索功能,而不是使用与DataTables捆绑在一起的功能。我以前曾问过这个问题:DataTables - kill ajax requests when a new one has started是我基于其工作的。
当我尝试重绘表格时-在用户将输入输入到#keywords-bysubstancestable
输入中之后-这样...
var debouncedDraw = _.debounce(function (opts) {
bySubstancesTable.draw();
return false;
}, 500);
...正在向/get-product-notifications.json
发送ajax请求,但是即使我输入了输入,请求中的keywords:
参数也为空。
奇怪的是,如果我console.log($('#keywords-bysubstancestable').val())
实际上是在提供价值。例如,如果我在输入中键入“ Australia”,则console.log()
语句将给出以下信息:
但是,即使在发送所有其他参数的情况下,在“网络”标签中,keywords:
上的请求也为空:
为什么会这样?
结果是该表显示“正在加载通知...”文本,但该表中实际上没有任何更改。
我不明白这一点,因为我从另一个看起来确实有效的项目中复制了bySubstancesTable.draw();
。我认为.draw()
确实是重绘表格的正确方法吗?
答案 0 :(得分:2)
您正在读取值并将其分配给keywords
而不是expression
本身,因此您的关键字始终是静态的,即初始化表时获得的值。
数据表支持function
作为ajax.data
的值,该值应采用数据对象并返回修改后的数据对象。
var bySubstancesTable = $('#bySubstancesTable').DataTable({
processing: true,
serverSide: true,
searching: false,
ajax: {
data: function (d) {
d.list_requested = 'bySubstancesTable'; // <table> #ID
d.keywords = $('#keywords-bysubstancestable').val(); // search keywords
return d;
},
url: '/get-product-notifications.json',
},
"language": {
...
"processing": 'Loading notifications...'
}
...
});