I’m following the datatables.net manual
Target: want turn every page, then load certain amount of data
now: every time will load “all” the data (17k), and wait 4 sec to do so
If page 1 just load the 1st – 10th data, page 3 is 21th – 30th data, then could save the loading time
draw_table(require_json)
function draw_table(data) {
const getToken = localStorage.getItem("token");
console.log("GET TOKEN", getToken);
$.ajax({
url: "http://192.168.10.01:3000/log/list/",
type: 'PUT',
dataType: 'json',
contentType: 'application/json; charset=UTF-8',
data: JSON.stringify(data),
headers: {
'Authorization': 'Bearer ' + getToken
},
success: function (response) {
console.log("SUCCESS", response);
},
error: function (response) {
console.log("ERROR", response);
}
});
}
require_json = {
"limit": 10,
"offset": 1,
"search": "",
"id": 0,
"start_id": 0,
"end_id": 0,
"event": "",
"user": "",
"message": "",
"type": "",
"start_time": "",
"end_time": "",
"order_by": "desc",
"order_column": "id"
}
var storedItem = localStorage.getItem("storedItem") || [];
$(document).ready(() => {
const getToken = localStorage.getItem("token");
const API_URL = "http://192.168.10.01:3000/api/log/all"; // this one is correct that can load and print data as table
// (but need to load for few second cause data is about 17k)
var rowData;
console.log("GET TOKEN", getToken);
var accountType = localStorage.getItem("acc_type");
var buttons = [
{
extend: "csv",
text: "CSV",
className: "btn btn-outline-warning btn-lg",
},
{
extend: "excel",
text: "Excel",
className: "btn btn-outline-success btn-lg",
},
];
var buttonRow = $('<div class="row"></div>');
buttons.forEach(function (button) {
var buttonCol = $('<div class="col"></div>').append(button);
buttonRow.append(buttonCol);
});
if (accountType === "OP") {
buttons = buttons.slice(2);
}
var table = $("#example").DataTable({
ajax: {
url: API_URL,
headers: {
Authorization: "Bearer " + getToken,
},
dataSrc: function (response) {
console.log("DATA", response);
return response.logs;
},
},
lengthChange: false,
pageLength: 10,
serverSide: true,
scrollY: true,
columns: [
{ data: "id", title: "id" },
{ data: "message", title: "message" },
{ data: "type", title: "type" },
{ data: "user", title: "created_by" },
{ data: "created_at", title: "created_at" },
],
dom: '<"row"<"col"B><"col text-right"l><"col"f>>rtip',
buttons: buttons,
});
table.draw();
$("#example tbody").on("click", "button", function (event) {
var data = table.row($(this).parents("tr")).data();
rowData = data;
console.log("GET edit DATA", data);
});
$("#exampleModal").on("show.bs.modal", function (event) {
var button = $(event.relatedTarget);
var recipient = button.data("whatever");
var modal = $(this);
var data = rowData;
modal.find(".modal-title").text("Update data " + recipient);
var inputFields = modal.find(".modal-body input");
if (button.attr("id") == "AddedNew_Data") {
inputFields.val("");
} else {
var keys = Object.keys(data);
for (var i = 0; i < inputFields.length; i++) {
$(inputFields[i]).val(rowData[keys[i]]);
}
}
});
$("#exampleModal").on("show.bs.modal", (e) => {
$(".modalTextInput").val("");
let btn = $(e.relatedTarget);
let id = btn.data("id");
$(".saveEdit").data("id", id);
});
$(".saveEdit").on("click", function () {
let id = $(this).data("id");
saveNote(id);
$("#exampleModal").modal("toggle");
});
});