ChartJS(オンラインの例を参照)を使用して単純な線グラフを作成し、MySQL DBから必要なデータを引き出しました。私はテーブル(書き込み速度)から1つのフィールドだけを引っ張ったので、前のグラフにグラフが1行しかありませんでした。ChartJSを使用してグラフを描くことができません
DBから3つのフィールド(test_id、write_speed、read_speed)を引き出し、グラフ内に2つの線グラフを表示するように更新しました。しかし、今は動作しません。
JavaScriptにはかなり新しいので、どこが間違っているのか理解できません。どんな助けでも大歓迎です。ここで
は、DBからのデータに引っ張っコードです:
<?php
/**
* filename: data.php
*/
//setting header to json
header('Content-Type: application/json');
//database
define('DB_HOST', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'simpletest');
//get connection
$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if(!$mysqli){
die("Connection failed: " . $mysqli->error);
}
//query to get data from the table
$query = "SELECT test_id, read_speed, write_speed FROM log2 ORDER BY test_id ASC";
//execute query
$result = $mysqli->query($query);
// All good?
if (!$result) {
// Nope
$message = 'Invalid query: ' . $link->error . "n";
$message .= 'Whole query: ' . $query;
die($message);
}
//loop through the returned data
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
//free memory associated with result
$result->close();
//close connection
$mysqli->close();
//now print the data
print json_encode($data);
次のスクリプトで呼び出すHTMLファイルです:
<!DOCTYPE html>
<html>
<head>
<title>Test Tesults New</title>
<style>
.chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div class="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/linegraph.js"></script>
</body>
</html>
下記チャートスクリプトです:
$(document).ready(function() {
/**
* call the data.php file to fetch the result from db table.
*/
$.ajax({
url : "http://localhost/test/chartjs2/api/data.php",
type : "GET",
success : function(data)
{
console.log(data);
var testid = [];
var readspeed = [];
var writespeed = [];
for (var i in data)
{
testid.push("TestID " + data[i].test_id);
readspeed.push(data[i].read_speed);
writespeed.push(data[i].write_speed);
}
//get canvas
var chartdata = {
labels : testid,
datasets : [
{
label : "Read Speed in Gbps",
data : readspeed,
backgroundColor : "blue",
borderColor : "lightblue",
fill : false,
lineTension : 0,
pointRadius : 5
}
{
label : "Write Speed in Mbps",
data : writespeed,
backgroundColor : "blue",
borderColor : "darkblue",
fill : false,
lineTension : 0,
pointRadius : 5
}
]
};
var options = {
title : {
display : true,
position : "top",
text : "New Test Results",
fontSize : 18,
fontColor : "#111"
},
legend : {
display : true,
position : "bottom"
}
};
if (chart) {
chart.destroy();
}
//var ctx = document.getElementById('myChart').getContext('2d');
var ctx = $("#mycanvas");
var chart = new Chart(ctx, {
type : "line",
data : chartdata,
options : options
});
},
error : function(data) {
console.log(data);
}
});
});
私は完全に私を逃しているかもしれない本当に愚かな間違いを犯している可能性があります。実際に何か愚かなことをしたのかどうかを指摘しています。
ありがとうございます。
の間違ったバージョンによって送られた間違ったJSONコンソールで(devのツール、コンソールタブのF12)、スクリプトの出力を確認してください。スクリプトに 'debugger;'ステートメントを追加してください。 devtoolsを開いたら、その行で一時停止し、データが正しいかどうかを調べることができます。 – HMR
私はあなたがエラーを引き起こすかもしれない宣言の前にチャートを破壊していると信じています。 –
私の答えを更新しました。構文エラー、間違ったchartjsバージョン(バンドルなし)、または有効でないjsonのいずれかです。 chrome開発ツールを使用して、コードに何が間違っているかを調べるようアドバイスします。 – HMR