Я пытаюсь заполнить массив элементами JSON в ссылке на HighCharts.JQuery POST не заполняющий массив
Один из объектов JSON заполняется вручную, и нужно динамически заполнять сообщение PHP. Я пытаюсь использовать функцию обратного вызова для передачи данных в массив, но никакие данные, похоже, не будут нажаты.
Я могу проверить, что данные возвращаются из Почты PHP. Кажется, что он заполняет массив, но как только функция JQQ POST завершена, кажется, что массив опустел.
Кроме того, у меня есть консольный вызов внутри POST. Это действительно правильно печатает массив.
Вы можете увидеть из кода ниже, что я использую console.table() call сразу после публикации, и он пуст. Но после того, как я нажимаю вручную дальше, массив данных теперь имеет данные внутри него для ручного массива JSON.
Любые идеи?
Вот мой код:
/* INITIAL ARRAY **************************************/
data_array = [];
var colors = Highcharts.getOptions().colors;
categories = ['Dynamic', 'Manual'];
/* FUNCTION TO PUSH TO ARRAY *****************************/
function push_toarray(cats,counts) {
data_array.push({
y: 10.38,
color: colors[1],
drilldown: {
name: 'Dynamically Populated',
categories: [cats],
data: [counts],
color: colors[1]
}
});
}
/* PHP AND FOR LOOP FOR GETTING DATA *********************************************/
$.post("php/dt_charts.php")
.done(function(data) {
var obj = jQuery.parseJSON(data);
// To verify the values are returned
console.log(obj.fe_det_name);
console.log(obj.fe_det_count);
push_toarray(obj.fe_det_name, obj.fe_det_count);
console.table(data_array); // This prints the array correctly with both JSON objects inside
});
//console.table(data_array); // This prints no data.
/* MANUAL DATA ARRAY *********************************************/
data_array.push({
y: 10.38,
color: colors[1],
drilldown: {
name: 'Manually Populated',
categories: ['Firefox v31', 'Firefox v32', 'Firefox v33', 'Firefox v35', 'Firefox v36', 'Firefox v37', 'Firefox v38'],
data: [0.33, 0.15, 0.22, 1.27, 2.76, 2.32, 2.31, 1.02],
color: colors[1]
}
})
console.table(data_array); // This prints only the manually populated array values
Таким образом, проблема заключается в том, что внутри «сделанной» функции объект заселен. Но когда вы покидаете функцию, все модификации исчезают и становятся пустыми? – user4035
проблема в том, что javascript является асинхронным, поэтому, когда вы пытаетесь получить доступ к массиву после отправки сообщения, на самом деле происходит то, что пост выполняется после вашего оператора журнала, поэтому вы получаете пустое data_array – MoniXx
, это решение написать свой код внутри сделанного обратного вызова, таким образом, вы можете фактически использовать значения, возвращенные из вашего сообщения. – MoniXx