создание highchart с данными и AJAX с JSON
Я пытаюсь создать простую диаграмму на странице, используя данные mysql, полученные с помощью сценария mysql
Я не понимаю, как интегрировать вызов ajax с данными, необходимыми для диаграммы. Я не знаю достаточно о различных графических плагинах, чтобы сделать мою жизнь легкой и в настоящее время пробую highchart.
мой PHP скрипт возвращает следующий JSON:
[{"name":"golfers"},{"data":[5.7879,6.6286,6.1724,5.3125,7.1481,6.1333,4.5769]}]
мой сценарий диаграммы:
$(function () {
visitorData(function(data) {
console.info(data);
$('#chart1').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Average Visitors'
},
xAxis: {
categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
},
yAxis: {
title: {
text: 'Number of visitors'
}
},
series: data,
});
});
});
моя функция, чтобы сделать ajax звоните:
$.ajax({
url: '/visitdata',
type: 'GET',
async: true,
dataType: "json",
success: function (data) {
console.warn(data);
return data;
}
});
но на данный момент ничего не отображается.
Я не уверен, как эффективно сделать вызов ajax и интегрировать его в функцию диаграммы. Я решил перезвонить на основе предыдущих попыток и сообщений, чтобы убедиться, что данные возвращаются до создания диаграммы - это бит правильно?
Я не на 100% уверен, что данные json структурированы правильно
Я не уверен, что я; ve применил переменную данных к серии правильно
В основном-нужен учебник по этому вопросу, чтобы я мог заставить его работать и экспериментировать
вся помощь оценена
спасибо
3 ответов
Я думаю, что вы не можете возвращать значения из успешного вызова, вместо этого вам нужно будет вызвать функцию. Поэтому настройте свою функцию, которая инициализирует вашу диаграмму, и в AJAX success вызовите эту функцию с данными
С вашим примером кода
function visitorData (data) {
$('#chart1').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Average Visitors'
},
xAxis: {
categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
},
yAxis: {
title: {
text: 'Number of visitors'
}
},
series: data,
});
}
$(document).ready(function() {
$.ajax({
url: '/visitdata',
type: 'GET',
async: true,
dataType: "json",
success: function (data) {
visitorData(data);
}
});
});
в вашей функции успеха ajax вызовите функцию visitorData с данными[1].данные (поскольку именно так форматируется ваш json)
$.ajax({
url: '/visitdata',
type: 'GET',
async: true,
dataType: "json",
success: function (data) {
visitorData(data[1].data);
}
});
кроме того, ваша функция visitorData def нечетна.
vistorData = function(data)
или
function vistorData(data)
//parse json response
var chartSeriesData = [];
var chartCategory = [];
$.each(response, function() {
if(this.name!="TOTAL" && this.no!="0") {
var series_name = this.name;
var series_data = this.no;
var series = [
series_name,
parseFloat(series_data)
];
chartSeriesData.push(series);
}
});
//initialize options for highchart
var options = {
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'SalesOrder '
},
tooltip: {
pointFormat: '{series.name}: <b>{point.y}</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
center:['60%','60%'],
size:150
,
dataLabels: {
enabled: true,
color: '#000000',
distance: 40,
connectorColor: '#000000',
format: '<b>{point.name}</b>: {point.y} '
}
}
},
series: [{
type: 'pie',
name: 'Browser share',
data:chartSeriesData //load array created from json
}]
}
//options.series[0].setData(datavaluejson);
var chart= $('#container').highcharts(options);