2015-05-14 216 views
1

我想繪製一個使用chart.js和AJAX的折線圖,但是當數據來自服務器時圖表沒有正確繪製。該圖表很好地繪製窗口onload事件,但與AJAX它無法正確呈現。可能是什麼問題?這裏是我的代碼 -在AJAX中更新chart.js不會正確渲染圖形

的index.html:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>AJAX JSON Chart</title> 
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> 
<script type="text/javascript" src="js/Chart.min.js"></script> 
<script type="text/javascript"> 
var randomScalingFactor = function(){ return Math.round(Math.random()*100)}; 
var lineChartData = { 
    labels : ["January","February","March","April","May","June","July"], 
    datasets : [ 
     { 
      label: "My First dataset", 
      fillColor : "rgba(220,220,220,0.2)", 
      strokeColor : "rgba(220,220,220,1)", 
      pointColor : "rgba(220,220,220,1)", 
      pointStrokeColor : "#fff", 
      pointHighlightFill : "#fff", 
      pointHighlightStroke : "rgba(220,220,220,1)", 
      data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()] 
     } 
    ] 

} 

window.onload = function(){ 
var ctx = document.getElementById("canvas").getContext("2d"); 
window.myLine = new Chart(ctx).Line(lineChartData, { 
    responsive: false 
}); 
} 

// ajax part of chart // 
$(document).ready(function(e) { 
    $("#frm1").submit(function(){ 
    var canvas = document.getElementById('canvas'); 
    ctx = canvas.getContext('2d'); 

    var btnchart = $("#btnchart").attr("name") + "=" + $("#btnchart").val(); 
     $.ajax({ 
      //beforeSend: function(){ sendRequest("canvas"); }, 
      cache: false, 
      type: "POST", 
      dataType: "json", 
      url: "ajax/chart.php", 
      data: $(this).serialize() + "&" + btnchart, 
      success: function(data){ 
       //alert(data.labels); 
       //alert(data.points); 
       renderGraph(data.labels, data.points, ctx); 
      }, 
     }); 
    return false; 
    }); 
}); 

var renderGraph = function (labels, points, ctx) { 

     var lineChartData = { 
         labels: "[" + labels + "]", 
         datasets: [ 
          { 
           label: "Recent Orders", 
           fillColor: "rgba(220,220,220,0.2)", 
           strokeColor: "rgba(220,220,220,1)", 
           pointColor: "rgba(220,220,220,1)", 
           pointStrokeColor: "#fff", 
           pointHighlightFill: "#fff", 
           pointHighlightStroke: "rgba(220,220,220,1)", 
           data: "[" + points + "]", 
          } 
         ] 
        }; 


     var myChart = new Chart(ctx) 
           .Line(lineChartData, { 
             responsive: false, 
             animation: false 
             }); 
             myChart.update(lineChartData); 

    } 

function sendRequest(id) 
{ 
    $("#"+id).html('<div style="width:100px; margin:0 auto;"><img id="loader-img" alt="" src="images/preloader.gif" width="100" height="100" /></div>'); 
} 


</script> 
</head> 
<body> 
<div style="width:30%"> 
    <div> 
     <canvas id="canvas" height="450" width="960"></canvas> 
    </div> 
</div> 
<form id="frm1" name="frm1" method="post" action=""> 
<input type="submit" name="btnchart" id="btnchart" value="Draw Chart" /> 
</form> 
</body> 
</html> 

chart.php:

<?php 
$labels = array('29 April 2015', '30 April 2015', '1 May 2015', '2 May 2015', '3 May 2015', '4 May 2015', '5 May 2015'); 
$points = array('100', '250', '10', '35', '73', '0', '25'); 
echo json_encode(array('labels' => $labels, 'points' => $points)); 
?> 

在第一次加載頁面時,輸出爲:

enter image description here

點擊按鈕「畫表」後,輸出來通過AJAX是:

enter image description here

但是當我將鼠標懸停在圖片,它會自動轉換成第一圖像即第一正確的圖形,當窗口加載。奇怪!!!

+0

我試圖實現相同類型的功能,但無法找到正確的算法。你能解決這個問題嗎? – JESTech

+0

我改變了整個代碼。現在我不再使用這個庫chart.js了。 – user3779493

+0

使用[RGraph](http://www.rgraph.net/)通過一些很酷的效果來達到所需的目標。 – user3779493

回答

0

如此反覆繪製圖表之前,你可以做什麼只是摧毀早先創建的圖表與

myChart.destroy(); 

myChart.clear(); 

,然後重新繪製圖表。然後希望它能正確工作