Загрузка данных в Highcharts с помощью Ajax
Я пытаюсь обновить высокие графики при загрузке страницы и при изменении меню выбора с помощью вызова JQUERY AJAX. Данные возвращаются в формате [[10,1228800000],[10,1228800000]]. Диаграмма пуста и не отображает никаких данных.
Попробовал несколько решений, размещенных здесь, но ни одно из них не сработало.
var chart;
$(document).ready(function() {
var options = {
chart: {
renderTo: 'stats',
defaultSeriesType: 'spline'
},
title: {text:''},
xAxis: {
type: 'datetime'
},
yAxis: {},
series: []
};
var month = 'July';
$.ajax({
type: "POST",
data: "month="+month,
url: "update_visits_chart",
success: function (data) {
options.series.push(data);
chart = new Highcharts.Chart(options);
}
});
Есть ошибки? заранее спасибо. РЕДАКТИРОВАТЬ:
САМЫЙ ПОСЛЕДНИЙ КОД ВСЕ ЕЩЕ НЕ РАБОТАЕТ:
var options = {
chart: {
renderTo: 'stats',
type: 'spline'
},
title: {
text: ''
},
xAxis: {
type:'datetime',
tickInterval: 30 * 24 * 3600 * 1000,
dateTimeLabelFormats: {
day: '%b %e'
},
labels: {
rotation: -45,
align: 'right'
}
},
yAxis: {
title: {
text: 'Number of visits'
},
min: 0
},
tooltip: {
formatter: function() {
return Highcharts.dateFormat('%b %e', this.x) +'<br />'+this.y+' visit(s)';
}
},
legend: {
enabled: true
},
credits: {
enabled: false
},
exporting: {
enabled: false
},
series: [{
name: 'Number of Visits',
data: []
}]
};
var month = 'July';
$.ajax({
type: "POST",
url: "update_visits_chart",
data: "month="+month,
success: function(data){
options.series[0].data = data;
chart = new Highcharts.Chart(options);
}
});
2 ответа
Вы должны использовать метод setData объекта series, как описано в документации. В вашем случае это options.series[0].setData(Data)
И я думаю, что вы должны превратить ваш результат Ajax из строки в реальный объект / массив с помощью JSON.parse(data)
,
РЕДАКТИРОВАТЬ:@Ricardo Lohmann: в ajax-вызове он не указал dataType, который он ожидает в ответе, поэтому jQuery будет угадывать dataType. Но он не распознает строку, начинающуюся с [
как JSON, и я сомневаюсь, что его ответ будет подан с правильным типом пантомимы application/json
, Таким образом, указание правильного типа MIME также должно решить проблему. Но у меня нет примера полного ответа ajax спрашивающего. Так что я просто догадываюсь тоже.
Я бы порекомендовал следующий вызов ajax:
$.ajax({
type: "POST",
url: "update_visits_chart",
data: {month: month},
dataType: 'json',
success: function(data){
options.series[0].setData(data);
}
});
@Jugal Thakkar
$.getJSON
Это просто ярлык для вызова ajax выше, но он менее гибок, потому что у вас меньше вариантов.
Вы должны установить прямо data
к серии, потому что data
это уже многомерный массив.
Следующий код исправит это.
+ Изменить options.series.push(data);
в options.series = data;