我在服務器端模式下使用DataTables 1.10.15。DataTables - 在新服務器啓動時拋出Ajax請求
我通過AJAX傳遞形式的內容PHP腳本,以便它搜索數據庫:
var myTable = $('#myTable').DataTable({
"processing": false,
"serverSide": true,
"searching": false,
"ajax": {
"url" : "/getData.php",
"data" : function (d) {
// Search input data
d.field1 = $('#field1').val(),
d.field2 = $('#field2').val(),
d.field3 = $('#field3').val()
},
"method" : "POST",
}
});
我有檢查,至少3個字符輸入到其他一些JS在將ajax請求發送到/getData.php
之前。
這意味着 - 3個字符已被輸入之後 - 即一個AJAX請求被每一個鍵被按下時製成,所以不可能有AJAX的請求隊列。
$('#primarySearch input[type="text"]').on({
"keyup": function(e) {
// Ignore tab key.
if (e.which != 9) {
processPrimarySearch.call(this);
}
}
});
/* Handle Primary Search */
function processPrimarySearch() {
var obj = $(this),
search_id = obj.attr('id'), // e.g. #field1
search_value = obj.val(); // e.g. '123-456'
/* Wait until at least 3 characters have been entered, or user has cleared the input */
if (search_value.length >= 3 || (!search_value)) {
myTable.draw();
}
}
我怎麼能殺死每當一個新的由先前的Ajax請求,讓他們不以這種方式排隊?我已閱讀How can I stop all the currently ongoing Ajax queries that DataTables instance have started?,但解決方案適用於較舊版本的DataTable,並且接受的答案似乎對我無效。
你不能。它已經在serverscript上處理了。 – davidkonrad
我明白服務器正在處理腳本getData.php。但是可以停止Ajax請求(例如jquery中的'.abort()')。所以我想要做的是,如果說2個請求,已經對'getData.php'進行了處理,那麼它會殺死第一個請求,然後進入下一個請求。這樣就沒有腳本排隊了。該應用程序適用於每個按鍵,因此如果用戶輸入4個字符進行搜索,則不需要執行前3次搜索 - 它們可以在服務器處理它們之前關閉。我知道這是可能的,因爲它在我發佈的鏈接上,只是針對舊的數據表版本。 – Andy
您可以設置一個標誌,比如'processing',然後避免在'processing'爲true時執行ajax-request,在ajax成功時,將'processing'設置爲false。 – davidkonrad