Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chart.js TypeError:上下文为空_Javascript_Html_Chart.js - Fatal编程技术网

Javascript Chart.js TypeError:上下文为空

Javascript Chart.js TypeError:上下文为空,javascript,html,chart.js,Javascript,Html,Chart.js,我正在尝试使用HTML画布设置一个Chart.js,我在网上找到了一些成功的例子,但现在我正在尝试创建自己的Chart.js,我收到了一条错误消息 具体的错误消息是: TypeError: t is null[Learn More] acquireContext https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js:10 construct https://cdnjs.cloudflare.com/ajax/libs

我正在尝试使用HTML画布设置一个Chart.js,我在网上找到了一些成功的例子,但现在我正在尝试创建自己的Chart.js,我收到了一条错误消息

具体的错误消息是:

TypeError: t is null[Learn More]
acquireContext https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js:10
construct https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js:10
t https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js:10
<anonymous> file:///C:/Users/ahbuc/Documents/graph/script.js:8
我真的不确定我做错了什么,我以前成功地使用过Chart.js,所以不确定我做了什么不同。加载网页时,会加载
元素,但图表不会加载。

检查此解决方案


植物数据
环境数据
在过去500年中,地球上的人口数量(以百万计)
变量温度=[19,19,19,20,21,21,22,20,19,16,15,14];
var湿度=[40,40,40,60,50,40,30,20,10100,70,60];
变量湿度=[90,80,70,60,50,40,30,20,10,80,70,80];
var lux=[60,60,60,70,70,70,80,80,70,70,60,50];
风险值日期=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
var ctx=document.getElementById(“myChart”);
var myChart=新图表(ctx{
键入:“行”,
数据:{
标签:日期,
数据集:[{
数据:温度,
标签:“温度”,
边框颜色:“3e95cd”,
填充:假,
yAxisID:“Num”
},
{
数据:湿度,
标签:“湿度”,
边框颜色:“8e5ea2”,
填充:假,
yAxisID:“每”
},
{
数据:湿度,
标签:“土壤湿度”,
边框颜色:“3cba9f”,
填充:假,
yAxisID:“每”
},
{
数据:勒克斯,
标签:“光”,
边框颜色:“#e8c3b9”,
填充:假,
yAxisID:“每”
}
]
},
选项:{
比例:{
雅克斯:[{
id:“Num”,
类型:“线性”,
位置:“左”
},
{
id:“每”,
类型:“线性”,
位置:“右”
}
]
}
}
});

成功解决了这个问题,来自Madhawa Priyashantha关于在HTML画布加载之前如何加载图表的评论。我将前面的JS代码封装在
window.onload=function(){…}
中,以确保首先加载DOM

JS的工作状态,未更改任何其他内容:

window.onload = function() {
    var temp = [19,19,19,20,21,21,22,20,19,16,15,14];
    var humidity = [40,40,40,60,50,40,30,20,10,100,70,60]; 
    var moisture = [90,80,70,60,50,40,30,20,10,80,70,80];
    var lux = [60,60,60,70,70,70,80,80,70,70,60,50];
    var dates = ["January","February","March","April","May","June","July","August","September","October","November","December"];

    var ctx = document.getElementById("myChart");
    var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels:dates,
        datasets:[
            {
                data:temp,
                label:"Temperature",
                borderColor:"#3e95cd",
                fill:false,
                yAxisID:"Num"
            },
            {
                data:humidity,
                label:"Humidity",
                borderColor:"#8e5ea2",
                fill:false,
                yAxisID:"Per"
            },
            {
                data:moisture,
                label:"Soil Moisture",
                borderColor:"#3cba9f",
                fill:false,
                yAxisID:"Per"
            },
            {
                data:lux,
                label:"Light",
                borderColor:"#e8c3b9",
                fill:false,
                yAxisID:"Per"
            }
        ]
    },
    options: {
        scales: {
            yAxes: [{
                id:"Num",
                type:"linear",
                position:"left"
            },
            {
                id:"Per",
                type:"linear",
                position:"right"
            }]
        }
    }
    }); 
}

您应该在加载dom后调用图表代码。因此,请将您的逻辑封装在函数中,并在ready/onload事件中调用该函数。不确定是什么原因导致此问题,但我猜在调用图表函数时画布未加载我已经运行了您的代码,您所说的错误我看不到。你可以在这里检查它是否正常工作。我认为您需要在适当的区域调用javascript代码。这可能会导致一些控制台错误,但这是针对您正在讨论的问题。@rykamol在适当的区域调用我的JS代码是什么意思?我认为在HTML中从
头部调用JS脚本是正常的?在文件末尾(例如:页脚部分)添加脚本标记,而不是在头部部分,现在它可以工作了。这真的很奇怪,我尝试在不同的浏览器中运行它(Edge 42.17134.1.0和Chrome 72.0.3626.119)页面仍然会加载,但不会加载图表。将JS代码放入标记中。html内容,然后是JS代码。它会起作用的。
var temp = [19,19,19,20,21,21,22,20,19,16,15,14];
var humidity = [40,40,40,60,50,40,30,20,10,100,70,60]; 
var moisture = [90,80,70,60,50,40,30,20,10,80,70,80];
var lux = [60,60,60,70,70,70,80,80,70,70,60,50];
var dates = ["January","February","March","April","May","June","July","August","September","October","November","December"];

var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
  type: 'line',
  data: {
      labels:dates,
      datasets:[
          {
              data:temp,
              label:"Temperature",
              borderColor:"#3e95cd",
              fill:false,
              yAxisID:"Num"
          },
          {
              data:humidity,
              label:"Humidity",
              borderColor:"#8e5ea2",
              fill:false,
              yAxisID:"Per"
          },
          {
              data:moisture,
              label:"Soil Moisture",
              borderColor:"#3cba9f",
              fill:false,
              yAxisID:"Per"
          },
          {
              data:lux,
              label:"Light",
              borderColor:"#e8c3b9",
              fill:false,
              yAxisID:"Per"
          }
      ]
  },
  options: {
      scales: {
          yAxes: [{
            id:"Num",
            type:"linear",
            position:"left"
          },
        {
            id:"Per",
            type:"linear",
            position:"right"
        }]
      }
  }
});
window.onload = function() {
    var temp = [19,19,19,20,21,21,22,20,19,16,15,14];
    var humidity = [40,40,40,60,50,40,30,20,10,100,70,60]; 
    var moisture = [90,80,70,60,50,40,30,20,10,80,70,80];
    var lux = [60,60,60,70,70,70,80,80,70,70,60,50];
    var dates = ["January","February","March","April","May","June","July","August","September","October","November","December"];

    var ctx = document.getElementById("myChart");
    var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels:dates,
        datasets:[
            {
                data:temp,
                label:"Temperature",
                borderColor:"#3e95cd",
                fill:false,
                yAxisID:"Num"
            },
            {
                data:humidity,
                label:"Humidity",
                borderColor:"#8e5ea2",
                fill:false,
                yAxisID:"Per"
            },
            {
                data:moisture,
                label:"Soil Moisture",
                borderColor:"#3cba9f",
                fill:false,
                yAxisID:"Per"
            },
            {
                data:lux,
                label:"Light",
                borderColor:"#e8c3b9",
                fill:false,
                yAxisID:"Per"
            }
        ]
    },
    options: {
        scales: {
            yAxes: [{
                id:"Num",
                type:"linear",
                position:"left"
            },
            {
                id:"Per",
                type:"linear",
                position:"right"
            }]
        }
    }
    }); 
}