翻閱古今
2021-12-23 15:58:42
服務器端模式下的數據表 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 - 當一個新的請求開始時終止 ajax 請求,這是我工作的基礎。當我嘗試重繪表格時 - 在用戶輸入#keywords-bysubstancestable輸入后 - 像這樣......var debouncedDraw = _.debounce(function (opts) { bySubstancesTable.draw(); return false;}, 500);...它正在向 ajax 發出請求,/get-product-notifications.json但keywords:即使我輸入了輸入,請求中的參數也是空的。奇怪的是,如果我console.log($('#keywords-bysubstancestable').val())真的給出了價值。例如,如果我在輸入中輸入“Australia”,則console.log()語句給出:但是當查看網絡選項卡中的請求時,keywords:即使發送了所有其他參數也是空的:為什么會這樣?結果是表格顯示了“正在加載通知...”文本,但表格中實際上沒有任何變化。我不明白這一點,因為我bySubstancesTable.draw();從另一個似乎可以工作的項目中復制了它。我認為這.draw()確實是重繪表格的正確方法?
1 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
您正在讀取值并將值分配給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...'
}
...
});
添加回答
舉報
0/150
提交
取消