使用Javascript

时间:2017-08-12 22:20:46

标签: javascript json canvasjs

我正在尝试构建一个动态图表,使用CanvasJS每秒更新此API数据:http://www.coincap.io/history/1day/BTC

我无法显示正确的值。现在它只显示X轴上的第一个数据集(MktCap)。我需要第二组(Price)的数据。我弄乱了钥匙吗?

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
window.onload = function() {
    var dataPoints = [];
    var chart;
    $.getJSON("http://www.coincap.io/history/1day/BTC", function(data) {  
        $.each(data, function(key, value){
            dataPoints.push({x: value[1][0], y: parseInt(value[1][1])});
        });
        chart = new CanvasJS.Chart("chartContainer",{
            title:{
                text:"Live Chart with dataPoints from External JSON"
            },
            data: [{
                type: "line",
                dataPoints : dataPoints,
            }]
        });
        chart.render();
        updateChart();
    });
    function updateChart() {
    $.getJSON("http://www.coincap.io/history/1day/BTC", function(data) {
        $.each(data, function(key, value) {
            dataPoints.push({
            x: parseInt(value[1][0]),
            y: parseInt(value[1][1])
            });
        });
        chart.render();
        setTimeout(function(){updateChart()}, 1000);
    });
    }
}
</script>
<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
</head>
<body>
<div id="chartContainer" style="height: 300px; width: 100%;"></div>
</body>
</html>

1 个答案:

答案 0 :(得分:3)

问题出在0xFFFFFFFF,因为$.each(data, ...是一个对象,具有以下形状:

data

在对象上调用{ "market_cap": [[0, 1], [1, 2], [2, 1], ...], "price": [[0, 21], [1, 42], [2, 11], ...], "volume": [[0, 10], [1, 3], [2, 2], ...], } 时,它会迭代对象的键。使用您的代码,它只获得数组的两个项目。你想要做的是选择$.each,所以它将遍历所有项目。例如:

"price"

初始和$.each(data.price, function(key, value) { dataPoints.push({ x: value[0], y: value[1], }) }) 函数。请注意,您不需要使用updateChart,因为它已经是整数。之后,您将看到正确的行。