Datatables handle null ajax response? - javascript

This is my datatable code:
table = $('#datatable-buttons').DataTable({
lengthChange: false,
pageLength: 25,
order: [ 0, 'desc' ],
//buttons: ['copy', 'excel', 'pdf', 'colvis']
columns: [
{ data: "sample_lab_ref" },
{ data: "sample_client_ref" },
{ data: "sample_client_ref2" },
{ data: "sample_client_ref3" },
{ data: "sample_date" },
{ data: "report_date" },
{ data: "test_parameter_name" },
{ data: "test_parameter_sop" },
{ data: "test_technique_name" },
{ data: "test_value_text" },
{ data: "test_units" }
],
columnDefs: [
{
targets: [4, 5],
visible: false,
searchable: false
}
],
ajax: {
url: "/assets/ajax/test_data_ajax_handler.php",
type: "POST",
data: {
action: "getTestData",
user_data: '<?=json_encode($userData)?>'
}
},
buttons: {
buttons: [
{ extend: 'copy', className: 'btn-info' },
{ extend: 'pdf', className: 'btn-danger' },
{
extend: 'csv',
className: 'btn-success',
text: 'Export to CSV',
exportOptions: {
modifier: {
search: 'applied'
}
}
},
{ extend: 'colvis', className: 'btn-primary' },
]
},
initComplete: function(settings, json) {
table.buttons().container()
.appendTo('#datatable-buttons_wrapper .col-md-6:eq(0)');
}
});
Works fine, but in the event the function in the ajax handler returns NULL (no rows found). How can I tell the datatable to display something like "No data found". Right now it gives me an invalid json syntax error.

You can create empty json like this:
{
"data": [],
"total": 0,
"recordsTotal": 0,
"recordsFiltered": 0
}

Try using dataSrc and pass a function to process your data.. Hope the attached data pre-processing callback will be called even on HTTP errors
sample code
$('#example').dataTable( {
"ajax": {
"url": "data.json",
"dataSrc": function ( json ) {
for ( var i=0, ien=json.data.length ; i<ien ; i++ ) {
json.data[i][0] = '<a href="/message/'+json.data[i][0]+'>View message</a>';
}
return json.data;
}
}
} );

From here Display warning if records null Datatables AJAX - dataSrc
You can fix it with dataSrc
ajax: {
url: "/assets/ajax/test_data_ajax_handler.php",
type: "POST",
data: {
action: "getTestData",
user_data: '<?=json_encode($userData)?>'
},
dataSrc: function(data){
if(data.data == null){
return [];
} else {
return data.data;
}
}
},

Related

How to show jquery DataTable column as Custom Javascript action link

I'm using the below code to generate the table, but I need to show code as link where I should able to run custom code to navigate to another record
$('#customerdt').DataTable({
"bInfo": false,
data: accountData,
columns: [
{ data: 'code' },
{ data: 'customerid' },
{ data: 'name' },
{ data: 'telephone' },
{ data: 'emailaddress' },
{ data: 'joiningdate' }
],
"bDestroy": true
});
Use the columns.render option
const table = $('#customerdt').DataTable({
"bInfo": false,
data: accountData,
columns: [
{
data: 'code',
render: (data, type, row) => `${data}`
}
{ data: 'customerid' },
{ data: 'name' },
{ data: 'telephone' },
{ data: 'emailaddress' },
{ data: 'joiningdate' }
],
"bDestroy": true
});
table.on('click', '.my-class', function() {
const emailAddress = this.getAttribute('data-email');
}

Uncaught TypeError: $(...).html(...).modal is not a function

I am getting above error when i try to show id in pop up window.
my code are below
grid.cshtml
<script src="#Url.Content("~/js/Grid.js")" type="text/javascript"></script>
<div id="login_for_review" class="modal hide" role="dialog"></div>
grid.js
var init = function () {
var Grid = $("#Grid");
Grid.kendoGrid({
dataSource: {
transport: {
read: {
url: "/",
dataType: "json",
type: "GET"
},
parameterMap: function (data, type) {
if (type == "read") {
return {
limit: ,
offset: ,
sort:
}
}
}
},
schema: {
data: "Records",
total: "TotalRecordCount"
},
serverPaging: true,
pageSize: 25,
serverSorting: true,
sort: { field: "Name", dir: "asc" }
},
sortable: {
allowUnsort: false
},
pageable: true,
pageable: {
pageSizes:
},
noRecords: {
template: ""
},
columns: [
{
field: "Name",
title: "Name"
},
{
template: "<div>#if(data.id> 0){#<a href = 'javascript:void(0);' onClick='showDiv(#:TemplateId#)'>#:id# Sites</a>#} else{#ff#}#</div>",
field: "id",
title: ""
}
]
});
};
(function ($) {
$(document).trigger("o", [false, { type: "item", href: "url", text: "", showText: true }]);
init();
})(jQuery);
function showDiv(data) {
getSiteId();
console.log(data);
}
var getSiteId = function () {
$.ajax({
type: 'GET',
url: "",
dataType: 'json',
success: function (data) {
$('#login_for_review').html(data).modal('show');
// window.$('#myModal').modal();
console.log(data);
}
});
};
actually I am trying to show return id like 1,2,3.. in horizonal in a pop up when showDiv clicked .
I have followed some links and implemented in this way . Could you please help me to solve this issue ?

Reload datatable after dropdown value changed

I have a datatable and a dropdown. I want to change the datatable after dropdown value change. First of all, I tried the simplest trial & error by getting return value from controller after dropdown changes value and it works smoothly. Here is my code:
$('#ID_Univ').change(function () {
$.ajax({
type: 'GET',
url: '#Url.Action("Get_Approved")',
data: { ID: _Id },
success: function (data) {
// data, I got return value
// do something here
}
});
});
and then here is my datatable code
var tbl_Approved = $('#tbl_Approved').DataTable({
lengthMenu: [10, 25, 50, 75, 100],
searchPane: {
columns: [':contains("Name")', ':contains("Period")'],
threshold: 0
},
////////////////////////////////////
processing: true,
serverSide: true,
ajax: { ??? },
////////////////////////////////////
columns: [
{ data: 'ID_Approved_Monthly', title: "ID" },
{ data: 'Name', title: "Name" },
{ data: 'Period', title: "Period" },
{ data: 'Approved', title: "Approved" },
{ data: 'Approved_Date', title: "Approval Date" },
{ data: 'Paid_Status', title: "Paid Date" },
],
columnDefs: [{
targets: [0],
visible: false,
searchable: false
}],
dom: 'Rlfrtip'
});
I put datatable code outside $(document).ready(function (). So, when the page reload, it just reload the datatable as variable and whenever dropdown's value changed it just call datatableName.ajax.reload();. That's the idea.
Now, my question are,
how do I put the ajax call in the datatable to reload datatable that det return value from controller (ASP .Net Core). I see someone did this flawlessly in youtube but it made by PHP. I have same idea with this youtube.
why I don't see any change in my datatable when dropdown value change ? even, I've put ajax.data according to "Add data to the request (returning an object)"
in this case, do I have to use server side ?
So here is my complete code, what I've been trying till right now and still get stuck.
<script type="text/javascript">
var tbl_Approved = $('#tbl_Approved').DataTable({
lengthMenu: [10, 25, 50, 75, 100],
searchPane: {
columns: [':contains("Name")', ':contains("Period")'],
threshold: 0
},
////////////////////////////////////
processing: true,
serverSide: true,
ajax: { //I get get stuck here :((
"datatype": "json",
type: 'GET',
url: '#Url.Action("Get_Approved")',
data: function (d) {
return $.extend({}, d, {
ID: $('#ID').val(),
})
}
},
////////////////////////////////////
columns: [
{ data: 'ID_Approved_Monthly', title: "ID" },
{ data: 'Name', title: "Acc Name" },
{ data: 'Period', title: "Period" },
{ data: 'Approved', title: "Approved" },
{ data: 'Approved_Date', title: "Approval Date" },
{ data: 'Paid_Status', title: "Paid Date" },
],
columnDefs: [{
targets: [0],
visible: false,
searchable: false
}],
dom: 'Rlfrtip'
});
$(document).ready(function () {
tbl_Approved_Allowance.draw();
$('#ID').change(function () {
tbl_Approved_Allowance.ajax.reload();
}
});
})
</script>
to solve this problem, I put ajax into .change(function()). Here is my code:
$('#ID').change(function () {
$.ajax({
type: 'GET',
url: '#Url.Action("Get_Approved")',
data: { ID: ID},
success: function (data) {
$('#tbl_Approved').DataTable({
destroy: true,
data: data,
lengthMenu: [10, 25, 50, 75, 100],
searchPane: {
columns: [':contains("Name")', ':contains("Period")'],
threshold: 0
},
columns: [[
{ data: 'ID_Approved_Monthly', title: "ID" },
{ data: 'Name', title: "Acc Name" },
{ data: 'Period', title: "Period" },
{ data: 'Approved', title: "Approved" },
{ data: 'Approved_Date', title: "Approval Date" },
{ data: 'Paid_Status', title: "Paid Date" },
],
dom: 'Rlfrtip'
});
}
})
});

DataTables draw not functioning

I do not know what I am missing or what is wrong with my code, I already tried tracing it from the console but the TransmittedDataTable.on('draw' does not work. What's wrong with my code?
Javascript Code:
$(document).ready(function () {
GetData()
});
function GetData() {
var TransmittedDataTable = $('#tbtransmitteddata').dataTable({
autoWidth: true,
initComplete: function () {
//this.api().columns([0, 1, 2, 3, 4]).every(function () {
this.api().columns().every(function () {
var column = this;
var select = $('<select><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw(function () {
});
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
});
},
'drawCallback': function (settings) {
//var api = this.api();
// Output the data for the visible rows to the browser's console
//console.log(api.rows({ page: 'current' }).data());
},
processing: true,
ajax: {
type: 'post',
contentType: 'application/json; charset=utf-8',
url: '../Application/ApplicationWS.asmx/GetDepEdTransmittal2',
dataSrc: function (json) {
return JSON.parse(json.d);
}
},
columns: [
{ data: "Region" },
{ data: "Division" },
{ data: "Station" },
{ data: "EmployeeNumber" },
{ data: "EmployeeName" },
{ data: "DednCode" },
{ data: "PolicyNo" },
{ data: "EffectDate" },
{ data: "TermDate" },
{ data: "Amount" },
{ data: "LoanAmount" },
{ data: "InterestAmount" },
{ data: "OtherCharges" },
{ data: "BillingType" },
{ data: "UpdateCode" }
],
//deferLoading: 57,
'columnDefs': [
{ 'targets': 4, 'title': 'Employee Name' },
{ 'targets': 5, 'title': 'Deduction Code' },
{ 'targets': 7, 'title': 'Effectivity Date' },
{ 'targets': 8, 'title': 'Termination Date' },
{ 'targets': 9, 'title': 'Deduction Amount' },
{ 'targets': 10, 'title': 'Loan Amount' },
{ 'targets': 11, 'title': 'Interest Amount' },
{ 'targets': 12, 'title': 'Other Charges' },
{ 'targets': 13, 'title': 'Billing Type' },
{ 'targets': 14, 'title': 'Update Code' }
//{ "targets": [13], "visible": false, "searchable": false }
]
//,scrollY:'50vh',
, dom: 'Blfrtip'
, colReorder: true
, buttons: [{
extend: 'pdfHtml5',
download: 'open',
orientation: 'landscape',
pageSize: 'LEGAL',
title: 'BILLING LIST & PROMISORRY NOTES',
//message: 'BILLING LIST & PROMISORRY NOTES',
exportOptions: {
//columns: [0, 1, 2, 3, 4, 5]
},
customize: function (doc) {
doc.content.splice(0, 0, {
margin: [0, 0, 0, 10],
alignment: 'center',
image: 'data:image/png;base64,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'
});
//console.log(doc.content[2]);
//doc.content[2].table.widths = [40, 40, 40, 60, 100, 40];
}
}]
});
TransmittedDataTable.on('draw.dt', function () {
TransmittedDataTable.columns().indexes().each(function (idx) {
var select = $(TransmittedDataTable.column(idx).footer()).find('select');
if (select.val() === '') {
select
.empty()
.append('<option value=""/>');
TransmittedDataTable.column(idx, { search: 'applied' }).data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>');
});
}
});
});
}
I already updated my code, tried draw.dt but a new error came out, in browers console an error shows Uncaught TypeError: TransmittedDataTable.columns is not a function(…)
You should add .dt to event name if you've used jQuery object or initialized your table with dataTable(), see example below.
TransmittedDataTable.on('draw.dt', function(){
});
If you initialized your table with DataTable(), .dt suffix is not needed.
Since you're trying to access other API methods using TransmittedDataTable variable, initialize your table with DataTable() and everything would work as expected.
See Events for more information.

jqGrid doesn't rise ondblClickRow event when filter applied

This is event calling filtering while typing:
$("#txtPickItem").change(function (e) { doSearchPick(); });
This is my jqGrid:
$("#gridChooseItems").GridUnload();
jQuery("#gridChooseItems").jqGrid({
url: 'MyURL', datatype: "JSON",
colNames: ['id', 'Group', 'Source order'...],
colModel: [
{ name: 'del', index: ' ', width: 28, hidden: true },
{ name: 'id', index: 'id', hidden: true },
{ name: 'Group', index: 'Group', hidden: true },
{ name: 'Code', index: 'Code', width: 180 }...
],
loadComplete: function () { if ($("#txtPickItem").val()) { setTimeout('doSearchPick();', 100); } },
rowNum: 25, rowList: [10, 25, 50, 100, 200],
pager: '#pagerChooseItems',
sortname: 'id',
ondblClickRow: function (id) { AddItem(id); },
height: 580,
width: 1050,
ignoreCase: true,
loadonce: true,
viewrecords: true,
sortorder: "desc",
caption: "Available items"
});
My filtering function:
function doSearchPick() {
var grid = $("#gridChooseItems");
var filter = {
"groupOp": "AND", "rules":
[
{ "field": "Supplier", "op": "cn", "data": $("#txtPickItem").val() }
]
};
grid.jqGrid('setGridParam', { search: true, postData: { filters: filter } });
grid.trigger("reloadGrid", [{ page: 1 }]);
}
I have to reload grid after doubleclick and apply filter so previously double clicked item is not in grid anymore (many things happens in between).
When $("#txtPickItem") is empty, ondblClickRow and everything works fine, filtering works fine too.
Problem is that when some text is contained in txtPickItem, ondblClickRow doesn't fire and I don't understand why. I need this ondblClickRow event desperately.
EDIT:
AddItem function works fine as everything else if $("#txtPickItem") is empty
function AddItem(id) {
pData = {}
pData["ItemID"] = id;
jQuery.ajax({
url: 'URL',
type: "POST",
dataType: "JSON",
data: pData,
success: function (data) {
if (data == "msg1") {
PopulatePickGridItems(); //fill some other grid
}
else if (data == "msg2") {
$("#divMsg").html("<ul><li>err1. msg.</li></ul>")
$('#dlgMsg').dialog('open');
}
else {
$("#divMsg").html("<ul><li>err2. msg.</li></ul>")
$('#dlgMsg').dialog('open');
}
}
});
}

Categories

Resources