2016-08-24 20 views
5

Tôi đang cố gắng tạo một số biểu đồ GAUGE bằng Google Graph. Mục tiêu của tôi là tải dữ liệu từ trang php và tự động làm mới. Tôi đã có thể làm điều đó, nhưng khi dữ liệu được làm mới, các đường đo không hoạt hình, nhưng thay vào đó chúng được vẽ lại từ mới. Tôi muốn xem hình ảnh động thú vị như thế này: https://jsfiddle.net/api/post/library/pure/. Thực ra tôi đang tải dữ liệu từ một tệp tĩnh, sau đó tôi sẽ tạo dữ liệu từ cơ sở dữ liệu MySQL (được kiểm tra và làm việc). Ở đây mã của tôi:Biểu đồ Google - Đồ thị đo biểu đồ không hoạt động

temperature.php

<html> 
<head> 
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script> 
<script type="text/javascript"> 
    google.charts.load('current', {'packages':['gauge']}); 
    google.charts.setOnLoadCallback(drawChart); 

    function drawChart() { 

     var jsonData = $.ajax({ 
     url: "http://URL/fetch_data3.php?type=gauge", 
     dataType:"json", 
     async: false 
    }).responseText; 


    var data = new google.visualization.DataTable(jsonData); 

    var options = { 
     width: 600, height: 300, 
     redFrom: 35, redTo: 50, 
     yellowFrom: 24, yellowTo: 35, 
     greenFrom: 18, greenTo: 24, 
     majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
     animation:{ 
     duration: 1000, 
     easing: 'inAndOut', 
     }, 
     max: 50, min: -10 
     }; 

     var chart = new google.visualization.Gauge(document.getElementById('chart_div')); 

    chart.draw(data, options); 
    clearChart(); 

} 

setInterval(function() { 
    drawChart(); 
}, 5000); 

</script> 

</head> 
<body> 
<div id="chart_div" style="width: 500px; height: 400px;"></div> 
</body> 
</html> 

và ở đây fetch_data3.php

<?php 
if ($_REQUEST["type"] == "gauge") { 
    $sec = date('s'); 
if ($sec % 2 == 0) { 
    $string = file_get_contents("sampleData.json"); 
} else { 
    $string = file_get_contents("sampleData2.json"); 
} 
echo $string; 
} 
?> 

sampleData.json:

{ 
    "cols": [ 
     {"id":"","label":"Label","pattern":"","type":"string"}, 
     {"id":"","label":"Value","pattern":"","type":"number"} 
     ], 
    "rows": [ 
     {"c":[{"v":"Esterno","f":null},{"v":0,"f":null}]}, 
     {"c":[{"v":"Soggiorno","f":null},{"v":0,"f":null}]}, 
     {"c":[{"v":"Stanza","f":null},{"v":0,"f":null}]} 
     ] 
} 

sampleData2.json:

{ 
    "cols": [ 
     {"id":"","label":"Label","pattern":"","type":"string"}, 
     {"id":"","label":"Value","pattern":"","type":"number"} 
     ], 
    "rows": [ 
     {"c":[{"v":"Esterno","f":null},{"v":10,"f":null}]}, 
     {"c":[{"v":"Soggiorno","f":null},{"v":40,"f":null}]}, 
     {"c":[{"v":"Stanza","f":null},{"v":20,"f":null}]} 
     ] 
} 

Biểu đồ tải mẫu ngẫu nhiênData2.json hoặc sampleData.json nhưng không có bất thường trên biểu đồ.

Có vấn đề gì?

Cảm ơn!

Simon

+0

https://jsfiddle.net/api/post/library/pure/là trống :) –

+0

Xin lỗi, nó dựa trên các thông tin được hiển thị trong tài liệu google: https://google-developers.appspot.com/chart/interactive/docs/gallery/gauge – Simon

Trả lời

3

theo supported modifications cho một biểu đồ Gauge,
hoạt hình chỉ xảy ra khi một giá trị trong dữ liệu thay đổi

kể từ khi bảng xếp hạng không sinh động trên startup,
vẽ biểu đồ ban đầu với các giá trị được đặt thành giá trị min,
hoặc giá trị tại đó hoạt ảnh sẽ bắt đầu

sau đó sử dụng một một lần'ready' sự kiện người nghe để vẽ biểu đồ với dữ liệu thực tế
này sẽ gây ra các biểu đồ để animate

thấy sau đoạn làm việc ...

google.charts.load('current', { 
 
    callback: function() { 
 
    drawChart(); 
 

 
    setInterval(function() { 
 
     drawChart(); 
 
    }, 5000); 
 

 
    function drawChart() { 
 
     var initData = { 
 
     "cols": [ 
 
      {"id":"","label":"Label","pattern":"","type":"string"}, 
 
      {"id":"","label":"Value","pattern":"","type":"number"} 
 
     ], 
 
     "rows": [ 
 
      {"c":[{"v":"Esterno","f":null},{"v":-10,"f":null}]}, 
 
      {"c":[{"v":"Soggiorno","f":null},{"v":-10,"f":null}]}, 
 
      {"c":[{"v":"Stanza","f":null},{"v":-10,"f":null}]} 
 
     ] 
 
     }; 
 

 
     var data = new google.visualization.DataTable(initData); 
 

 
     var options = { 
 
     width: 600, height: 300, 
 
     redFrom: 35, redTo: 50, 
 
     yellowFrom: 24, yellowTo: 35, 
 
     greenFrom: 18, greenTo: 24, 
 
     majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
 
     animation:{ 
 
      duration: 1000, 
 
      easing: 'inAndOut' 
 
     }, 
 
     max: 50, min: -10 
 
     }; 
 

 
     var chart = new google.visualization.Gauge(document.getElementById('chart_div')); 
 

 
     google.visualization.events.addOneTimeListener(chart, 'ready', function() { 
 
     var jsonData = { 
 
      "cols": [ 
 
      {"id":"","label":"Label","pattern":"","type":"string"}, 
 
      {"id":"","label":"Value","pattern":"","type":"number"} 
 
      ], 
 
      "rows": [ 
 
      {"c":[{"v":"Esterno","f":null},{"v":10,"f":null}]}, 
 
      {"c":[{"v":"Soggiorno","f":null},{"v":40,"f":null}]}, 
 
      {"c":[{"v":"Stanza","f":null},{"v":20,"f":null}]} 
 
      ] 
 
     }; 
 

 
     var data = new google.visualization.DataTable(jsonData); 
 
     chart.draw(data, options); 
 
     }); 
 

 
     chart.draw(data, options); 
 
    } 
 
    }, 
 
    packages:['gauge'] 
 
});
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="chart_div"></div>

như đã đề cập, các biểu đồ trên sẽ animate ...

từ các giá trị mặc định được đặt - cho dữ liệu thực nhận được

để đưa biểu đồ này hoạt động ...

từ dữ liệu thực tế trước đó - để các dữ liệu mới nhận

bạn sẽ cần phải lưu một tham chiếu đến chart
thay vì tạo ra một mới chart, mọi lúc nó được vẽ

cũng , khuyên bạn nên không sử dụng async: false trên số $.ajax gọi
sử dụng trình xử lý success thay vì

khuyên thiết lập này, mà sẽ animate vào bốc thăm đầu tiên sử dụng các giá trị mặc định
sau đó động từ dữ liệu trước đó, để các dữ liệu mới trên mỗi khoảng

google.charts.load('current', { 
    callback: function() { 
    // save reference to chart 
    var chart = null; 

    drawChart(); 

    setInterval(function() { 
     drawChart(); 
    }, 5000); 

    function drawChart() { 
     $.ajax({ 
     url: 'http://URL/fetch_data3.php?type=gauge', 
     dataType: 'json', 
     success: function (jsonData) { 
      var options = { 
      width: 600, height: 300, 
      redFrom: 35, redTo: 50, 
      yellowFrom: 24, yellowTo: 35, 
      greenFrom: 18, greenTo: 24, 
      majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
      animation:{ 
       duration: 1000, 
       easing: 'inAndOut' 
      }, 
      max: 50, min: -10 
      }; 

      var data; 
      if (chart === null) { 
      chart = new google.visualization.Gauge(document.getElementById('chart_div')); 

      // data with min values 
      data = new google.visualization.DataTable({ 
       "cols": [ 
       {"id":"","label":"Label","pattern":"","type":"string"}, 
       {"id":"","label":"Value","pattern":"","type":"number"} 
       ], 
       "rows": [ 
       {"c":[{"v":"Esterno","f":null},{"v":-10,"f":null}]}, 
       {"c":[{"v":"Soggiorno","f":null},{"v":-10,"f":null}]}, 
       {"c":[{"v":"Stanza","f":null},{"v":-10,"f":null}]} 
       ] 
      }); 

      google.visualization.events.addOneTimeListener(chart, 'ready', function() { 
       data = new google.visualization.DataTable(jsonData); 
       chart.draw(data, options); 
      }); 
      } else { 
      data = new google.visualization.DataTable(jsonData); 
      } 

      chart.draw(data, options); 
     } 
     }); 
    } 
    }, 
    packages:['gauge'] 
}); 
+0

Cảm ơn GREAT !! ! – Simon

Các vấn đề liên quan