【发布时间】:2019-03-18 06:18:43
【问题描述】:
我的代码通过调用 ajax post api 调用将 Amcharts 与 postProcess 一起使用。它在 console.log 中给了我响应,但它不会从响应中创建图表。
我正在尝试这样做,但我不明白我在哪里做错了。
请检查我的代码并告诉我,或者我可以通过其他任何方式实现这一点。
这是我的代码:
$.ajax({
url: "API-Link",
data: {
"api": "rs_slotcount",
"params": "7"
},
type: "post",
dataType: "json",
success: function (result) {
console.log(result)
AmCharts.makeChart("slotridecounts", {
"type": "serial",
"fixedColumnWidth": '10px',
"dataProvider": result,
postProcess: function (jsonResponse, dataLoaderConfig, chart) {
var categoryField = chart.categoryField;
var newData = [];
var groupedData = {};
Object.keys(jsonResponse).forEach(function (arrayKey) {
jsonResponse[arrayKey].forEach(function (dataItem) {
if (!groupedData[dataItem[categoryField]]) {
groupedData[dataItem[categoryField]] = {};
groupedData[dataItem[categoryField]][categoryField] =
dataItem[categoryField];
}
groupedData[dataItem[categoryField]][arrayKey] = dataItem.rideCount;
});
});
Object.keys(groupedData).forEach(function (groupedKey) {
newData.push(groupedData[groupedKey]);
});
return newData;
},
complete: function (chart) {
var valueFields = chart.graphs.map(function (graph) {
return graph.valueField;
});
var maxValue = chart.dataProvider.reduce(function (maxValue, dataItem) {
var sum = valueFields.reduce(function (sum, valueField) {
return sum + dataItem[valueField];
}, 0);
return Math.max(maxValue, sum);
}, Number.MIN_VALUE);
chart.valueAxes.forEach(function (valueAxis) {
valueAxis.maximum = maxValue;
valueAxis.strictMinMax = true;
});
chart.validateData();
},
legend: {
horizontalGap: 10,
maxColumns: 1,
position: "right",
useGraphSettings: true,
markerSize: 10,
position: "top"
},
valueAxes: [{
gridColor: "#FFFFFF",
gridAlpha: 0.2,
dashLength: 0
}],
gridAboveGraphs: true,
startDuration: 1,
valueAxes: [{
stackType: "regular",
axisAlpha: 0.3,
gridAlpha: 0,
minimum: 0,
maximum: 100,
gridCount: 1
}],
graphs: [{
balloonText: "<b>[[title]]</b><br><span style='font-size:14px'>[[category]]: <b>[[value]]</b></span>",
fillColors: "#47b012",
lineColor: "#47b012",
fillAlphas: 0.8,
labelText: "[[value]]",
lineAlpha: 0.3,
title: "Driver",
type: "column",
color: "#000000",
valueField: "driver_data",
fixedColumnWidth: 25
},
{
balloonText: "<b>[[title]]</b><br><span style='font-size:14px'>[[category]]: <b>[[value]]</b></span>",
fillColors: "#fff138",
lineColor: "#fff138",
fillAlphas: 0.8,
labelText: "[[value]]",
lineAlpha: 0.3,
title: "Passenger",
type: "column",
color: "#000000",
valueField: "passenger_data",
fixedColumnWidth: 25
}
],
chartCursor: {
categoryBalloonEnabled: false,
cursorAlpha: 0,
zoomable: true
},
categoryField: "slot",
categoryAxis: {
gridPosition: "start",
gridAlpha: 0,
tickPosition: "start",
tickLength: 20,
labelRotation: 80,
labelFunction: function (valueText, dataItem, categoryAxis) {
if (valueText.length < 3) {
return valueText;
} else {
return valueText.replace(/(00|30)$/, ":$1");
}
}
}
});
}
});
Ajax 响应
{
"driver_data": [
{
"slot": 0,
"rideCount": 0
},
{
"slot": 30,
"rideCount": 0
},
{
"slot": 100,
"rideCount": 0
}
],
"passenger_data": [
{
"slot": 0,
"rideCount": 0
},
{
"slot": 30,
"rideCount": 0
},
{
"slot": 100,
"rideCount": 0
}
]
}
【问题讨论】:
标签: javascript jquery amcharts