【问题标题】:Chart.js not working on my page?Chart.js 在我的页面上不起作用?
【发布时间】:2016-09-26 00:43:22
【问题描述】:

我正在尝试在 wordpress 网站上使用 chart.js。我可以从文档中获得简单的条形图,但没有别的。我无法渲染饼图、甜甜圈、折线图或雷达图……即使我只是将代码从 JSFiddle 直接复制到我的页面。

请看这个页面:http://www.sledgeweb.com/2016/05/27/chart-test/

应该有一个饼图,然后是一个条形图。条形图有效,但饼图画布为空白。怎么回事?

【问题讨论】:

  • 如果你按 F12 并查看控制台,你会发现 chart.js 没有被包含。
  • 顶部的chart.js链接是否有问题(在头部)?我在异地链接它。但是,我很困惑,因为条形图确实出现了......我不确定如果不包含 chart.js 是否可以做到这一点?
  • 看来问题在于您从 github 包含 chart.js 的方式。 See this SO post。最好在您的服务器上托管您自己的 chart.js 副本。
  • 我不确定为什么在这种情况下会加载条形图?无论如何,我现在从我自己的服务器加载 js,它看起来完全一样?
  • 由于您包含 github chart.js 的方式,条形图未在 chrome 中加载。饼图的问题显示在浏览器控制台中。

标签: javascript wordpress charts chart.js


【解决方案1】:

原因可能是您使用的是最新的 chart.min.js,但使用的是旧代码。如需正确参考,请遵循 chartjs.org 文档。

代码配置结构在最新版本中发生了变化。 (我猜是从 2.3 开始)

所以,而不是

var countries= document.getElementById("countries").getContext("2d");
var chart = new Chart(countries).Pie(pieData,pieOptions);

我们的结构如下:

var countries= document.getElementById("countries").getContext("2d");
var chart = new Chart(countries,{
  type: 'pie',
  data: 
  {
    labels: ['India', 'Germany', 'Netherland'],
    datasets: 
        [{
        backgroundColor: '#337ab7',
        data: ['100', '99' ,'98'],
        borderWidth:1,
        }]
  },
  options:
  {
      responsive: true,
      maintainAspectRatio:false,
      legend: {
        display: false,
        position: 'top'
      }
  }
});

var countries= document.getElementById("countries").getContext("2d");
var pieData = 
{
    labels: ['India', 'Germany', 'Netherland'],
    datasets: [{
      backgroundColor: '#337ab7',
      data: ['100', '99' ,'98'],
      borderWidth:1,
      }]
};
var pieOptions = 
{
    responsive: true,
    maintainAspectRatio:false,
    legend: {
      display: false,
      position: 'top'
    }
};

var chart = new Chart(countries,{    
type: 'pie',
data: pieData,
options: pieOptions
});

【讨论】:

    【解决方案2】:

    问题是您的 <script> 标签指向 GitHub 的原始代码文本文件。因为这些文件是“原始的”,所以它们是从服务器发送的,带有标题 Content-Type:text/plain; charset=utf-8X-Content-Type-Options:nosniff (see this question),它们告诉客户端浏览器这些是文本文件,它们不应该是可执行的。因此,某些浏览器(例如 Chrome)会阻塞并不允许执行 JavaScript。如果您将 ChartJS 的 <script> 标签的 src URL 更改为指向 CDN 或不发送这些标头的位置,它应该可以正常工作。

    【讨论】:

    • 我已将 chart.js 移至我的服务器并链接它,但仍然没有运气。请刷新。还有其他想法吗?
    • 看起来图表现在可以正常工作了。我在控制台中看到的唯一错误是您使用的是不存在的.live()。 jQuery 的文档说旧版本应该使用.delegate() 而不是.live()
    【解决方案3】:

    您的 JavaScript 出现错误,您可以通过按 F12 在控制台中看到它们它们是:

    未捕获的TypeError:(中间值)。Pie 不是函数(匿名函数)

    未捕获的类型错误:$(...).live 不是函数

    基于此,并调查这些代码行,您的图表数据和调用与 chart.js docs 中的内容不匹配。您可以按照开发人员文档中使用的格式使其工作。这样的事情应该可以工作:

    var pieData = {
        datasets: [{
            data: [
                25,
                10,
                30,
                35
            ],
            backgroundColor: [
                "#811BD6",
                "#9CBABA",
                "#D18177",
                "#6AE128"
            ],
            label: 'My Skills' // for legend
        }],
        labels: [
            "Java",
            "Scala",
            "PHP",
            "HTML"
        ]
    };
    
    
    var context = document.getElementById('skills');
    var myPieChart = new Chart(context,{
        type: 'pie',
        data: pieData
    });
    

    希望有帮助!

    【讨论】:

    • 谢谢。我已经使用您的代码进行了更新。结果完全相同。条形图显示,但没有饼图。任何想法为什么?
    • 实际上,我得到了它的工作。不知道发生了什么,但是当我在此处复制您的代码时插入了一个分节符。消除之后,我得到了一个饼图来显示!谢谢。
    猜你喜欢
    • 2012-06-12
    • 2016-02-24
    • 1970-01-01
    • 2019-07-12
    • 2011-10-14
    • 1970-01-01
    • 2021-11-30
    • 2014-03-25
    • 2018-10-29
    相关资源
    最近更新 更多