2017-10-06 1 views
0

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); 
     } 
    }); 

}); 

私は完全に私を逃しているかもしれない本当に愚かな間違いを犯している可能性があります。実際に何か愚かなことをしたのかどうかを指摘しています。

ありがとうございます。

+0

の間違ったバージョンによって送られた間違ったJSONコンソールで(devのツール、コンソールタブのF12)、スクリプトの出力を確認してください。スクリプトに 'debugger;'ステートメントを追加してください。 devtoolsを開いたら、その行で一時停止し、データが正しいかどうかを調べることができます。 – HMR

+0

私はあなたがエラーを引き起こすかもしれない宣言の前にチャートを破壊していると信じています。 –

+0

私の答えを更新しました。構文エラー、間違ったchartjsバージョン(バンドルなし)、または有効でないjsonのいずれかです。 chrome開発ツールを使用して、コードに何が間違っているかを調べるようアドバイスします。 – HMR

答えて

0

あなたがここに構文エラーがあります。

{ 
     label : "Write Speed in Mbps", 

は、(カンマを追加)する必要があります:

,{ 
     label : "Write Speed in Mbps", 

あなたのコンソール出力を確認すると、おそらくとして、JavaScriptコードを編集するvscodeまたは原子を使用してくださいエディタは構文エラーについても教えてくれました。

最新のバージョンのchart.jsを使用していることを確認してください(2.7.0のバンドルアップまたは依存関係)。それはあなたのコードの構文エラーのいずれかであるので、私は固定データでエラーを再現することはできません

、あなたが試みることができるPHPやchart.js

var testid = [1,2,3,4,5]; 
 
var readspeed = [6,7,8,9,10]; 
 
var writespeed = [4,5,6,7,8]; 
 

 
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 = $('#mycanvas'); 
 
var chart = new Chart(ctx, { 
 
    type : "line", 
 
    data : chartdata, 
 
    options : options 
 
});
<canvas id="mycanvas" width="400" height="400"></canvas> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.bundle.js"></script>

+1

あなたの提案が助けになりました。デベロッパーツールに入って、キャンバス宣言がベースHTMLファイルで定義されているものと一致していないことが判明しました。あなたが指摘したように別の愚かな構文エラーがありました:欠落したカンマ(私をかなり昏睡状態にしました)。それらを修正し、彼らは期待どおりに働いた。ありがとうございました。 :) –

関連する問題