【发布时间】:2020-06-28 14:51:04
【问题描述】:
我在 DRF 中有 json 数据,它们在 url:http://127.0.0.1:8000/api/data/ 本地运行,如下所示:
[
{
"id": 2,
"timestamp": "2020-03-15T11:46:10+07:00",
"vibration": 3,
"moisture": 70,
"gps_latitude": "-7.7713794",
"gps_longitude": "110.3753111",
"gyro_x": 6.58,
"gyro_y": 85.0,
"gyro_z": -3.9,
"accelero_x": 6.58,
"accelero_y": 85.0,
"accelero_z": -3.9,
"displacement": 10,
"node_id": 1
},
{
"id": 6,
"timestamp": "2020-03-15T12:00:10+07:00",
"vibration": 3,
"moisture": 75,
"gps_latitude": "-7.7713794",
"gps_longitude": "110.3753111",
"gyro_x": 6.58,
"gyro_y": 85.0,
"gyro_z": -3.9,
"accelero_x": 6.58,
"accelero_y": 85.0,
"accelero_z": -3.9,
"displacement": 10,
"node_id": 1
},
{
"id": 7,
"timestamp": "2020-03-15T13:00:10+07:00",
"vibration": 3,
"moisture": 75,
"gps_latitude": "-7.7713794",
"gps_longitude": "110.3753111",
"gyro_x": 6.58,
"gyro_y": 85.0,
"gyro_z": -3.9,
"accelero_x": 6.58,
"accelero_y": 85.0,
"accelero_z": -3.9,
"displacement": 10,
"node_id": 1
},
{
"id": 8,
"timestamp": "2020-03-16T07:00:00+07:00",
"vibration": 3,
"moisture": 80,
"gps_latitude": "-7.7713794",
"gps_longitude": "110.3753111",
"gyro_x": 6.58,
"gyro_y": 85.0,
"gyro_z": -3.9,
"accelero_x": 6.58,
"accelero_y": 85.0,
"accelero_z": -3.9,
"displacement": 10,
"node_id": 1
}
]
我想根据字段“振动”和“水分”的所有数据制作折线图。我已经用这样的代码试过了:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Try Chart</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
<script>
function dspChrt(hum, vibrate) {
hum = loadChart().hum;
vibrate = loadChart().vibrate;
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['M', 'T', 'W', 'T', 'F', 'S', 'S'],
datasets: [{
label: 'Humidity',
data: hum, // json value received used in method
backgroundColor: "rgba(153,255,51,0.4)"
}, {
label: 'Vibration',
data: vibrate,
backgroundColor: "rgba(255,153,0,0.4)"
}]
}
});
}
</script>
<script>
var myVar = setInterval(loadChart, 60000); // updates chart every one minute
function loadChart()
{
var data, hum, vibrate;
var requestURL = 'http://127.0.0.1:8000/api/data'; //URL of the JSON data
var request = new XMLHttpRequest({mozSystem: true}); // create http request
request.onreadystatechange = function() {
if(request.readyState == 4 && request.status == 200) {
data = JSON.parse(request.responseText);
for (var i=0; i<data.length;i++) {
hum = data[i].moisture;
vibrate = data[i].vibration;
}
console.log('hum', hum);
console.log('vibrate', vibrate);
console.log('data', data);
return data,hum,vibrate;
dspChrt(hum, vibrate);
}
}
request.open('GET', requestURL);
request.send(); // send the request
}
</script>
</head>
<body onload="loadChart()">
<div class="container">
<h2>Try Chart</h2>
<div>
<canvas id="myChart"></canvas>
</div>
</div>
</body>
</html>
但它不起作用,数据没有出现在图表上,并且在网页的检查元素中只返回“振动”和“水分”的最后一个数据。我希望将“振动”和“水分”中的所有数据绘制在图表上,而不仅仅是最后一个。 这是网页的检查元素: inspect-element-chart 我认为这是因为 json 的格式而发生的。有人知道如何解决吗?我仍然是编程的新手。之前谢谢你
【问题讨论】:
-
是 DRF - Django Rest 框架吗?您预计每分钟数据会发生什么变化?服务器上是否有数据记录器或其他东西?看看我的回答,希望对你有所帮助。
-
@AlexL 是的,它是 Django Rest 框架。我希望图表每分钟刷新一次并添加新数据。还没有服务器,我还是用localhost
-
@AlexL 顺便说一句,它有效!谢谢!
-
太棒了!很高兴听到!
标签: javascript arrays json django-rest-framework chart.js