Chart.js柱形图仍然无法呈现数据

xpcnnkqh  于 2024-01-07  发布在  Chart.js
关注(0)|答案(1)|浏览(255)

我正在尝试创建一个加密主页,跟踪和管理与比特币相关的数据。目前我正在使用blockchain.com API绘制一个图表,显示池中矿工的数量,该图表中没有列,只有一个空白的边框和轴。
我尝试使用以下代码渲染图形:

  1. var columns = []
  2. const chartAPI = 'https://api.blockchain.info/pools?timespan=5days'
  3. document.onload = function getData() {
  4. fetch(chartAPI)
  5. .then(res => res.json())
  6. .then(toFindData => columns.push(
  7. toFindData["AntPool"],
  8. toFindData["BTC M4"],
  9. toFindData["Foundry USA"],
  10. toFindData["ViaBTC"],
  11. toFindData["Unknown"],
  12. toFindData["BTC.com"],
  13. toFindData["F2Pool"],
  14. toFindData["Binance Pool"],
  15. toFindData["Mara Pool"],
  16. toFindData["Poolin"],
  17. toFindData["SBI Crypto"],
  18. toFindData["Ultimus"],
  19. toFindData["Braiins Poo"]
  20. ));
  21. const ctx = document.getElementById('chart');
  22. new Chart(ctx, {
  23. type: 'bar',
  24. data: {
  25. labels: ['AntPool', 'BTC M4', 'Foundry USA', 'ViaBTC', 'Unknown', 'BTC.com', 'F2Pool', 'Binance Pool', 'Mara Pool', 'Poolin', 'SBI Crypto', 'Ultimus', 'Braiins Pool'],
  26. datasets: [{
  27. label: 'BTC Pools',
  28. data: columns,
  29. borderWidth: 1
  30. }]
  31. },
  32. options: {
  33. scales: {
  34. y: {
  35. beginAtZero: true
  36. }
  37. }
  38. }
  39. });
  40. }

字符串
区块链API返回的数据为:

  1. {"ViaBTC":79,"Binance Pool":57,"Foundry USA":213,"F2Pool":85,"AntPool":194,"Mara Pool":32,"Poolin":12,"Unknown":29,"BTC M4":8,"SBI Crypto":13,"Ultimus":4,"BTC.com":4,"Braiins Pool":6}


这就是HTML:

  1. <div class=" max-w-sm w-full lg:max-w-full lg:flex flex-row">
  2. <div class="h-48 lg:h-auto lg:w-48 flex-none bg-cover rounded-t lg:rounded-t-none lg:rounded-l text-center overflow-hidden">
  3. </div>
  4. <div class="border-2 border-gray-400 lg:border-gray-400 bg-white rounded p-4 flex flex-row justify-between leading-normal">
  5. <canvas id="chart" width="800" height="400"></canvas>
  6. </div>
  7. </div>
  8. </div>
  9. </div>
  10. <script src="src/index.js"></script>


而不是正确的图形渲染,它根本不显示,如图所示:Canvas is blank:

sqyvllje

sqyvllje1#

最好使用window.onload
这样:

  1. window.onload = function() {
  2. getData();
  3. };

字符串
在这里看到它的行动:

  1. let columns = [];
  2. const chartAPI = 'https://api.blockchain.info/pools?timespan=5days';
  3. function getData() {
  4. fetch(chartAPI)
  5. .then(res => res.json())
  6. .then(toFindData => {
  7. columns.push(
  8. toFindData["AntPool"],
  9. toFindData["BTC M4"],
  10. toFindData["Foundry USA"],
  11. toFindData["ViaBTC"],
  12. toFindData["Unknown"],
  13. toFindData["BTC.com"],
  14. toFindData["F2Pool"],
  15. toFindData["Binance Pool"],
  16. toFindData["Mara Pool"],
  17. toFindData["Poolin"],
  18. toFindData["SBI Crypto"],
  19. toFindData["Ultimus"],
  20. toFindData["Braiins Poo"]
  21. );
  22. const ctx = document.getElementById('chart');
  23. new Chart(ctx, {
  24. type: 'bar',
  25. data: {
  26. labels: ['AntPool', 'BTC M4', 'Foundry USA', 'ViaBTC', 'Unknown', 'BTC.com', 'F2Pool', 'Binance Pool', 'Mara Pool', 'Poolin', 'SBI Crypto', 'Ultimus', 'Braiins Pool'],
  27. datasets: [{
  28. label: 'BTC Pools',
  29. data: columns,
  30. borderWidth: 1
  31. }]
  32. },
  33. options: {
  34. scales: {
  35. y: {
  36. beginAtZero: true
  37. }
  38. }
  39. }
  40. });
  41. });
  42. }
  43. window.onload = function() {
  44. getData();
  45. };
  1. <div class=" max-w-sm w-full lg:max-w-full lg:flex flex-row">
  2. <div class="h-48 lg:h-auto lg:w-48 flex-none bg-cover rounded-t lg:rounded-t-none lg:rounded-l text-center overflow-hidden">
  3. </div>
  4. <div class="border-2 border-gray-400 lg:border-gray-400 bg-white rounded p-4 flex flex-row justify-between leading-normal">
  5. <canvas id="chart" width="800" height="400"></canvas>
  6. </div>
  7. </div>
  8. <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

的数据
还有一种方法是使用:DOMContentLoaded

  1. let columns = [];
  2. const chartAPI = 'https://api.blockchain.info/pools?timespan=5days';
  3. function getData() {
  4. fetch(chartAPI)
  5. .then(res => res.json())
  6. .then(toFindData => {
  7. columns.push(
  8. toFindData["AntPool"],
  9. toFindData["BTC M4"],
  10. toFindData["Foundry USA"],
  11. toFindData["ViaBTC"],
  12. toFindData["Unknown"],
  13. toFindData["BTC.com"],
  14. toFindData["F2Pool"],
  15. toFindData["Binance Pool"],
  16. toFindData["Mara Pool"],
  17. toFindData["Poolin"],
  18. toFindData["SBI Crypto"],
  19. toFindData["Ultimus"],
  20. toFindData["Braiins Poo"]
  21. );
  22. const ctx = document.getElementById('chart');
  23. new Chart(ctx, {
  24. type: 'bar',
  25. data: {
  26. labels: ['AntPool', 'BTC M4', 'Foundry USA', 'ViaBTC', 'Unknown', 'BTC.com', 'F2Pool', 'Binance Pool', 'Mara Pool', 'Poolin', 'SBI Crypto', 'Ultimus', 'Braiins Pool'],
  27. datasets: [{
  28. label: 'BTC Pools',
  29. data: columns,
  30. borderWidth: 1
  31. }]
  32. },
  33. options: {
  34. scales: {
  35. y: {
  36. beginAtZero: true
  37. }
  38. }
  39. }
  40. });
  41. });
  42. }
  43. document.addEventListener("DOMContentLoaded", function() {
  44. getData();
  45. });
  1. <div class=" max-w-sm w-full lg:max-w-full lg:flex flex-row">
  2. <div class="h-48 lg:h-auto lg:w-48 flex-none bg-cover rounded-t lg:rounded-t-none lg:rounded-l text-center overflow-hidden">
  3. </div>
  4. <div class="border-2 border-gray-400 lg:border-gray-400 bg-white rounded p-4 flex flex-row justify-between leading-normal">
  5. <canvas id="chart" width="800" height="400"></canvas>
  6. </div>
  7. </div>
  8. <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

的字符串
对于:document.onreadystatechange,必须使用document.readyState属性进行处理,如下所示:

  1. document.onreadystatechange = function() {
  2. if (document.readyState === "complete") {
  3. getData();
  4. }
  5. };


下面是完整的示例:

  1. let columns = [];
  2. const chartAPI = 'https://api.blockchain.info/pools?timespan=5days';
  3. function getData() {
  4. fetch(chartAPI)
  5. .then(res => res.json())
  6. .then(toFindData => {
  7. columns.push(
  8. toFindData["AntPool"],
  9. toFindData["BTC M4"],
  10. toFindData["Foundry USA"],
  11. toFindData["ViaBTC"],
  12. toFindData["Unknown"],
  13. toFindData["BTC.com"],
  14. toFindData["F2Pool"],
  15. toFindData["Binance Pool"],
  16. toFindData["Mara Pool"],
  17. toFindData["Poolin"],
  18. toFindData["SBI Crypto"],
  19. toFindData["Ultimus"],
  20. toFindData["Braiins Poo"]
  21. );
  22. const ctx = document.getElementById('chart');
  23. new Chart(ctx, {
  24. type: 'bar',
  25. data: {
  26. labels: ['AntPool', 'BTC M4', 'Foundry USA', 'ViaBTC', 'Unknown', 'BTC.com', 'F2Pool', 'Binance Pool', 'Mara Pool', 'Poolin', 'SBI Crypto', 'Ultimus', 'Braiins Pool'],
  27. datasets: [{
  28. label: 'BTC Pools',
  29. data: columns,
  30. borderWidth: 1
  31. }]
  32. },
  33. options: {
  34. scales: {
  35. y: {
  36. beginAtZero: true
  37. }
  38. }
  39. }
  40. });
  41. });
  42. }
  43. document.onreadystatechange = function() {
  44. if (document.readyState === "complete") {
  45. getData();
  46. }
  47. };
  1. <div class=" max-w-sm w-full lg:max-w-full lg:flex flex-row">
  2. <div class="h-48 lg:h-auto lg:w-48 flex-none bg-cover rounded-t lg:rounded-t-none lg:rounded-l text-center overflow-hidden">
  3. </div>
  4. <div class="border-2 border-gray-400 lg:border-gray-400 bg-white rounded p-4 flex flex-row justify-between leading-normal">
  5. <canvas id="chart" width="800" height="400"></canvas>
  6. </div>
  7. </div>
  8. <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
展开查看全部

相关问题