Why my global variable isnt modified inside a JavaScript callback function - javascript

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?

Related

pass the argument from one method to another method in extjs

This is my view part
Ext.define('A2a.view.act.Job', {
extend: 'Ext.container.Container',
requires: [
'A2a.store.Job',
'A2a.store.SharedData',
],
border: false,
chart: null,
hrer: [],
layout: {type: 'vbox', pack: 'start', align: 'stretch'},
initComponent: function () {
var me = this;
Ext.Ajax.request({
url: utils.createUrl('api', 'dashboard-read'),
async: true,
callback: function(opts, success, response) {
try {
if (success) {
var output = App.decodeHttpResp(response.responseText);
const data = output.data;
var myArr = [];
data.map((date) =>
myArr = Object.keys(date).filter(key => key != 'DATE'));
me.hrer =myArr;
console.log(me.hrer =myArr);
me.loadChart();
//me.loadww();
}
} catch (ex) {
//return ex;
}
}
});
this.loadww();
this.loadData(me.hrer);
me.callParent(arguments);
},
loadData : function () {
console.log("Init Function");
},
loadww: function (hrer) {
var me = this;
//var self = this;
console.log(me.hrer);
me.jobStore = Ext.create('O2a.store.PendingReports');
Ext.apply(me, {
items: [
{
xtype: 'chart',
itemId: 'charid',
name: 'charid',
store : new Ext.create('Ext.data.JsonStore', {
proxy: {
type: 'ajax',
url : utils.createUrl('api', 'dashboard-read'),
reader: {
type: 'json',
root: 'data'
}
},
autoLoad : true,
successProperty : 'success',
fields : [{name: 'DATE', type: 'auto'}].concat(
O2a.store.SharedData.hrer.map(function(companyName) {
console.log(companyName);
return {
name: companyName,
type: 'int'
};
})
)
}),
style: 'background: #fff',
insetPadding: 40,
animate: true,
shadow: false,
flex: 2,
minHeight: 300,
legend: {
position: 'top',
boxStrokeWidth: 0,
labelFont: '12px Helvetica'
},
axes: [{
type: 'Numeric',
position: 'left',
fields: ['1'],
grid: true,
minimum: 0,
}, {
type: 'Category',
position: 'bottom',
fields: ['DATE'],
grid: true,
}],
}]
});
},
loadChart: function (hrer) {
var me = this;
console.log(me.hrer);
var cha = this.down('#charid');
var iii = null;
Ext.Ajax.request({
url: utils.createUrl('api', 'dashboard-read'),
async: true,
callback: function(opts, success, response) {
try {
if (success) {
var output = App.decodeHttpResp(response.responseText);
const data = output.data;
me.hrer
let myArr = [];
data.map((date) =>
myArr = Object.keys(date).filter(key => key != 'DATE'));
cha.series.clear();
for(var i=0;i<myArr.length;i++){
cha.series.add({
type: 'line',
axis: 'left',
xField: 'DATE',
border: false,
flex: 1,
title: myArr[i],
yField: myArr[i],
markerConfig: {
radius: 4
},
highlight: {
fill: '#000',
radius: 5,
'stroke-width': 2,
stroke: '#fff'
},
tips: {
trackMouse: true,
style: 'background: #FFF',
height: 20,
width: 120,
renderer: function (storeItem, item) {
var name = item.series.title[Ext.Array.indexOf(item.series.yField, item.yField)];
this.setTitle(name + ': ' + storeItem.get(item.yField));
}
}
});
}
} else {
//return 'Unknown Reason';
}
} catch (ex) {
//return ex;
}
}
});
}
}
);
I want to pass the hrer inside the loadww method. If I call the loadww inside the callback of initcomponent function I can be able to pass it. But the graph is not loading. If I call it after the ajax request the graph is loading, but can't pass the hrer to outside.
How to pass the hrer array inside the loadww function. Thanks in advance
From the style of the code it looks like this is ExtJS 3.x
In Ext.Ajax.request define the scope with this to stay in the view.
Your code is not in the best shape.
get rid of the try...catch.
try to write success: this.dashboardSuccess
using callback, will run in both cases (success, failure)
If this is ExtJS 4+ you should split your code in MVC
If this is ExtJS 6+ you should split your code in MVVM
write your code declarative
out the stores in VM and use the load-Event
do not use initComponent
use data-binding

Ajax Calls in highchart.js

Hello there to all developers :-)
I want to ask a question about making Ajax Calls in the highchart.js library
I have some values which I am returning via Ajax based on the information I am giving to the back-end (its an MVC .NET project) and then I want to render a new chart in each div with the class gainChart (I am adding Ids for other purposes,so don't bother them :-) )
var iteratorJs = 0;
$(".gainChart").each(function (i) {
$(this).attr('id', "gainChart" + (i + 1));
var chart = new Highcharts.Chart({
chart: {
renderTo: this,
type: 'line',
margin: 0,
backgroundColor: 'rgba(255,255,255,0.3)'
},
colors: ['#2E5430'],
xAxis: {
lineWidth: 0,
minorGridLineWidth: 0,
lineColor: 'green',
//type: 'datetime',
labels: {
enabled: false
},
categories: [
$.ajax({
type: "POST",
url: "forex-copy-points-days",
data: { page: 0, perPage: 5, iterator: iteratorJs },
dataType: 'json',
async: false,
success: function (data) {
var daysArr = data.days;
JSON.stringify(daysArr);
categories = daysArr;
console.log(daysArr);
}
})
]
},
tooltip: {
formatter: function () {
var text = '';
text = this.y + '$';
return text;
}
},
credits: { enabled: false },
title: { text: null },
legend: {
enabled: false
},
plotOptions: {
series: {
stacking: 'normal',
pointWidth: 10
}
},
series: [{
name: 'Balance',
showInLegend: true,
legendMarkerColor: "green",
legendText: "Profit for account",
data: [
$.ajax({
type: "POST",
url: "forex-copy-points-balance",
data: { page: 0, perPage: 5, iterator: iteratorJs },
dataType: 'json',
async: false,
success: function (balances) {
var balArr = balances.balances;
JSON.stringify(balArr);
data = balArr;
console.log(balArr);
}
})
]
}],
exporting: {
enabled: false
},
responsive: {
rules: [{
condition: {
maxWidth: 600
},
chartOptions: {
legend: {
enabled: false
}
}
}]
}
});
iteratorJs++;
});
The returning data is as it is supposed to be (different strings), yet nothing is displayed - only the background of the chart. Can someone give me a clue how to solve this and what to change in order to solve my problem.
Thanks in advance!
The jQuery $.ajax method call doesn't return the data that results from this call, so you can't write myData = $.ajax(). You have to use the success callback to get the data, and then use it.
So for example, instead of writing this:
categories: [
$.ajax({
type: "POST",
url: "forex-copy-points-days",
data: { page: 0, perPage: 5, iterator: iteratorJs },
dataType: 'json',
async: false,
success: function (data) {
var daysArr = data.days;
JSON.stringify(daysArr);
categories = daysArr;
console.log(daysArr);
}
})
]
You should write something like this:
$.ajax({
type: "POST",
url: "forex-copy-points-days",
data: { page: 0, perPage: 5, iterator: iteratorJs },
dataType: 'json',
async: false,
success: function (data) {
// create graph from AJAX call results
var chart = new Highcharts.Chart({
xAxis: {
categories: JSON.stringify(data.days)
},
series: [{
data: JSON.stringify(balances.balances)
}]
});
}
});

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.

How to bind dynamic data to highcharts basic area graph

I have to create the following graph and i have to dynamically load data into it.
Basic Area http://domoticx.com/wp-content/uploads/highcharts-area-basic-standaard.png
Could anyone please help me understanding how can it be done.
Below is where i am able to reach.:
$.ajax({
url: 'EthicsData',
dataType: "json",
type: "GET",
contentType: 'application/json; charset=utf-8',
async: false,
processData: false,
cache: false,
delay: 150,
success: function (data) {
var EthicReg = (data[0].regdet);
var EthicComp = (data[0].compdet);
var EthicsCompletions = new Array();
var EthicsRegistration = new Array();
for (var i in EthicReg) {
var serie = new Array(EthicReg[i].Value, EthicReg[i].year);
EthicsRegistration.push(serie);
}
for (var y in EthicComp) {
var series2 = new Array(EthicComp[y].value,
EthicComp[y].year);
EthicsCompletions.push(series2);
}
DrawEthicsAndCompl(EthicsCompletions, EthicsRegistration)
},
error: function (xhr) {
alert('error');
}
});
};
function DrawEthicsAndCompl(EthicsCompletions, EthicsRegistration) {
debugger;
var chart = new Highcharts.Chart({
chart: {
//plotBackgroundColor: null,
//plotBorderWidth: 1, //null,
//plotShadow: false,
renderTo: 'container1',
type: 'area'
},
title: {
text: 'US and USSR nuclear stockpiles'
},
subtitle: {
text: 'something'
},
xAxis: {
allowDecimals: false,
labels: {
formatter: function () {
return 10; // clean, unformatted number for year
}
}
},
yAxis: {
title: {
text: 'Nuclear weapon states'
},
labels: {
formatter: function () {
return this.value;
}
}
},
tooltip: {
pointFormat: '{series.name} produced <b>{point.y:,.0f}</b><br/>warheads in {point.x}'
},
plotOptions: {
area: {
pointStart: 2010,
marker: {
enabled: false,
symbol: 'circle',
radius: 2,
states: {
hover: {
enabled: true
}
}
}
}
},
series: [{
name: 'Registration',
data: [EthicsRegistration[0]]
}, {
name: 'Completions',
data: [EthicsCompletions[0]]
}]
});
}
Here is the link which demo's same but static data:
(http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/area-basic/)
Just change the order in which you are pushing items in array , means
Instead
var serie = new Array(EthicReg[i].Value, EthicReg[i].year);
EthicsRegistration.push(serie);
Use
var serie = new Array(EthicReg[i].year, EthicReg[i].Value);
EthicsRegistration.push(serie);
Also , If you are getting year's value don't use pointStart: 2010 instead leave it on the data you are getting from the response above.
Thanks #Nishith for providing the right direction. I modified the code as below:
name: 'Registration',
data: [EthicsRegistration[0][1], EthicsRegistration[1][1], EthicsRegistration[2][1]]
}, {
name: 'Completions',
data: [EthicsCompletions[0][1],EthicsCompletions[1][1],EthicsCompletions[2][1]]
}]
});

jqplot pass array uncaught exception: No Data

I am trying to pass the contents of an array to the jplot function but I am getting No data.
The array has been json encoden in php and it is an associative array.
$.ajax({
type: "POST",
url: "actions/myphp.php",
data: PassArray,
dataType: 'json',
beforeSend: function (html) { // this happens before actual call
// alert(html);
},
success: function (html) { // this happens after we get results
// $("#loginoutcome").text(html);
// alert(html);
var obj =html ;
// Now the two will work
$.each(obj, function(key, value) {
alert(key + ' ' + value);
});
var s1 = obj;
var plot8 = $.jqplot('pie8', [s1], {
grid: {
drawBorder: false,
drawGridlines: false,
background: '#ffffff',
shadow: false
},
axesDefaults: {},
seriesDefaults: {
renderer: $.jqplot.PieRenderer,
rendererOptions: {
showDataLabels: true
}
},
legend: {
show: true,
rendererOptions: {
numberRows: 1
},
location: 's'
}
});
I have also tried to pass it using var s1 = [obj]; but that didn't work also ...
This now works I was not using the array properly
success: function (html) { // this happens after we get results
// alert(html);
var obj =html ;
// Now the two will work
$.each(obj, function(key, value) {
alert(key + ' ' + value);
myArr.push([key, value]);
});
s1 = myArr;
var plot8 = $.jqplot('pie8', [s1], {
seriesColors: [ "#EB0712", "#12C456", "#EAA228", "#579575", "#839557", "#958c12",
"#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],
grid: {
drawBorder: false,
drawGridlines: false,
background: '#ffffff',
shadow: false
},
axesDefaults: {},
seriesDefaults: {
renderer: $.jqplot.PieRenderer,
rendererOptions: {
showDataLabels: true
}
},
legend: {
show: true,
rendererOptions: {
numberRows: 1
},
location: 's'
}
});
},

Categories

Resources