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.
Related
I have put the devexpress map to my application. It refreshes every 20 seconds, and the map moves to a certain location.
However, when it refreshes, I want it to stay in the same location. I tried changing the longitude/latitude and auto refresh, but it just goes to different locations, not the one I am at.
The code of the auto refresh:
var query = {
iType: eType
};
$.ajax({
type: "POST",
url: "WebMethods.aspx/GetLiveMapData",
//headers: { "Accept-Encoding": "gzip" },
data: JSON.stringify(query),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (result) {
if (AppPopup == null) { return; }
var map = $("#PopupContainer").dxForm("instance").getEditor("MapField");
var markers = [];
var sData;
var oData;
var fisShown = false;
sData = eval('(' + result.d + ')');
oData = JSON.parse(sData.data);
for (var item in oData) {
if (oData[item]['SHOWTOOLTIP'] == 1) {
fisShown = true;
} else {
fisShown = false;
}
markers.push({
location: { lat: oData[item]['ML_LATITUDE'], lng: oData[item]['ML_LONGITUDE'] },
iconSrc: oData[item]['ICON'], //"Content/Icons/map-marker.png",
onClick: function (args) { },
tooltip: {
isShown: fisShown,
text: oData[item]['TOOLTIP']
}
});
}
map.beginUpdate();
if (e == 0) {
map.option("autoAdjust", true);
map.option("zoom", 10);
} else {
map.option("autoAdjust", false);
//map.resetOption("autoAdjust");
}
map.option("markers", markers);
map.endUpdate();
setTimeout(function () {
LiveMapRefresh(1);
}, 20000);
},
failure: function (msg) {
},
error: function (a, b, c) {
ODAlertError(c + ' - ' + a.responseText);
}
});
};
var showCallback = function (e) {
var iMapHeight = $(window).height();
iMapHeight = iMapHeight - 160;
$("#PopupContainer").dxForm({
labelLocation: "top",
//height: $(window).height(),
items: [
{
itemType: "group",
colCount: 1,
items: [
{
itemType: "group",
colCount: 2,
colSpan: 2,
caption: "",
items: [
]
},
{
colSpan: 2,
template: "<div class='legends-div' id='LegendsDiv'></div>"
},
{
itemType: "group",
cssClass: "MapGroup",
colCount: 1,
colSpan: 2,
caption: ODGetMsg(1661),
items: [
{
colSpan: 1,
dataField: "MapField",
label: { visible: false, text: ODGetMsg(10434) },
editorType: "dxMap",
editorOptions: {
provider: "google",
type: "roadmap",
controls: true,
zoom: 10,
autoAdjust: false,
width: "100%",
height: iMapHeight,
onReady: function (e) {
setTimeout(function () {
var map = $("#PopupContainer").dxForm("instance").getEditor("MapField");
var markers = [];
markers.push({
location: { lat: 39.0742, lng: 21.8243 },
iconSrc: "Content/Icons/map-marker.png",
onClick: function (args) { },
tooltip: {
isShown: false
}
});
map.option("zoom", 5);
map.option("markers", markers);
LiveMapRefresh(0);
}, 0);
},
apiKey: {
bing: "",
google: "AIzaSyADwkYePzXKCgV0GoUvEiMgunuzxBBHh3w",
googleStatic: ""
}
}
}
]
}
]
}]
});
$("#PopupContainer").dxForm("instance").validate();
}
OpenPopup(ODGetMsg(4412), oPopupContent, OkCallback, showCallback, null, true, false, validateCallback)
}```
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;
}
}
},
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'
});
}
})
});
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');
}
}
});
}
I want to modify json object inside a function and then use the received value at another function. This is as a glimpse what I've coded:
$(document).ready(function () {
var json
$("#ok").click(function(){
function plotReglaFalsa(respuesta) {
json = respuesta
}
....
....
plotReglaFalsa(anyJSON)
function populateTable () {
console.log(json)
}
populateTable()
})
However json is not being modified, I do call functions required to the to the point of json being modified and the console.log statement prints undefined. I also know respuesta is a valid object.
However, plotReglaFalsa is actually a callback argument in an AJAX request, this is my full code:
$(document).ready(function () {
var json
$.plot($("#placeholder"), [ [] ], { yaxis: { show: true, max: 100, min: -100 }, xaxis: { show: true, max: 100, min: -100} });
$("#ok").click(function(){
var args = { algorithm: 'ReglaFalsa.py',
parameters: "\'"+$("#fx").val() + "\' " +
$("#a").val() + " " +
$("#b").val() + " " +
$("#tolerancia").val() + " " +
$("#iteracionesMaximas").val()
}
function plotReglaFalsa(respuesta) {
json = respuesta
var result = []
for (var series in respuesta) {
if (series!="x" && series != "y")
result.push({
data : [ [respuesta[series].a,respuesta[series].F], [respuesta[series].b, respuesta[series].G]]
})
}
result.push({
label: "fx",
color: "#FB2365",
data: _.zip(respuesta['x'], respuesta['y'])
})
var plot = $.plot( $("#placeholder"),
result,
{ selection:{mode: "xy"},
zoom: { interactive: true },
pan: { interactive: true },
grid: { markings: [{ xaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 1 }, { yaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 1 }] }
})
plot.getOptions().selection.mode = null
}
getSendingJSON("/plot",args,plotReglaFalsa)
populateTable()
function populateTable () {
console.log(json)
$("body").append("<table id='resultados' class='table table-bordered'><thead><th>i</th><th>a</th><th>F</th><th>b</th><th>G</th><th>w</th></thead><tbody></tbody></table>")
$('#resultados').dynatable({
features: {
paginate: false,
sort: false,
search: false,
perPageSelect: false,
recordCount: false
},
dataset: { records: json }
})
}
})
})
And this is populate table function:
function getSendingJSON(url,reqObject,callBack) {
$.ajax({
type: "get",
data: reqObject,
dataType: "json",
url: url,
success: function(response){
callBack(response);
}
});
}
Understanding that the issue is around the AJAX nature, what's the easiest workaround to assign response to a variable?