Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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数据集控制器';空';绘制图表时_Javascript_Jquery_Json_Performance_Chart.js - Fatal编程技术网

Javascript Chart.js数据集控制器';空';绘制图表时

Javascript Chart.js数据集控制器';空';绘制图表时,javascript,jquery,json,performance,chart.js,Javascript,Jquery,Json,Performance,Chart.js,让我先道歉。我不是一名javascript/web开发人员,我甚至不声称自己拥有该语言的工作知识或对环境的良好掌握。我是一名嵌入式C/C++程序员,实际上我只学了足够的JS来完成这个小项目,但现在我被一个似乎让我无法理解的错误所困扰 我正在尝试编写一个绘图实用程序,我可以将JSON格式的按日期的性能数据插入其中,以提供与夜间构建/CI测试相关的性能历史视图;我们的目标是一眼就发现每天的绩效有任何倒退。我尝试获取chart.js line.html示例,并根据需要对其进行了修改。它主要起作用,只是

让我先道歉。我不是一名javascript/web开发人员,我甚至不声称自己拥有该语言的工作知识或对环境的良好掌握。我是一名嵌入式C/C++程序员,实际上我只学了足够的JS来完成这个小项目,但现在我被一个似乎让我无法理解的错误所困扰

我正在尝试编写一个绘图实用程序,我可以将JSON格式的按日期的性能数据插入其中,以提供与夜间构建/CI测试相关的性能历史视图;我们的目标是一眼就发现每天的绩效有任何倒退。我尝试获取chart.js line.html示例,并根据需要对其进行了修改。它主要起作用,只是当页面最初加载时,图表是空白的。但是,当我打开javascript控制台进行调试时,它会正确绘制/运行,但我看到以下错误: Chart.bundle.min.js:13未捕获类型错误:无法读取null(匿名函数)的属性“draw”

当我查看图表的配置数据时,数据集中的数据是正确的,但是,数据集的_meta字段中的“controller”对象为null,我认为这是导致错误的原因。我不知道该怎么办。也许我没有完全满足初始化dataset对象的要求,但我认为我已经完成了示例所做的一切。我想知道我是否无意中重写了对象的某些部分,或者这只是一个排序问题?我迷路了

编辑:我刚刚意识到,窗口的任何调整都会导致图表正确绘制。我认为打开javascript控制台完全是因为主窗口的大小调整。当我在调整大小后在控制台中转储配置数据时,_meta.controller属性不再为null。也许我有一些排序混乱或需要延迟一些事情,但这似乎是一个大线索。在调整窗口大小后,它似乎100%正常工作。不过我还是不知道从这里该去哪里

代码如下:

<title>Line Chart</title>
<script src="https://code.jquery.com/jquery-1.10.2.js" charset=UTF-8></script>
<script src="Chart.js/dist/Chart.bundle.min.js"></script>
<style>
canvas{
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
}
</style>

任何帮助或想法都将不胜感激。谢谢

尝试使用setTimeout将window.load函数中的代码包装在延迟内,如果它有效,那么您的假设可能是正确的,即在上下文存在之前触发draw函数。有解决办法!好主意。谢谢我仍然看到错误在3秒后弹出(我的超时值),因此问题似乎与排序有关,而不是与计时有关。事实证明,null _meta.controller对象和屏幕调整之前不绘制是两个不同的问题。我已经通过使用引导选项卡解决了屏幕大小调整问题,每个选项卡上都有一个图表,用于我不同的机器配置,并为每个选项卡设置了一个图表。如果我在“类”字段中设置“活动”,图表在调整大小之前不会正确绘制,但是如果没有它,图表会正确绘制。你能用它创建一个小提琴吗!我很想调试。我不确定这意味着什么,但我会调查一下。:)所以当我创建fiddle时,我没有可用的输入文件,这导致我重新构造了get_json_数据中的一些变量声明,您不知道吗,错误消失了。我没有弄清楚确切的根本原因,但现在情况好转了。我唯一剩下的问题是,第一个/活动选项卡上的图表在加载时仍然无法绘制。在将数据绘制到图表上之前,我必须调整选项卡的大小或强制对其进行其他更新。随便玩吧。
<div style="width:75%;">
    <canvas id="canvas"></canvas>
</div>
<br>
<br>
<script>
    var randomColorFactor = function() {
        return Math.round(Math.random() * 255);
    };
    var randomColor = function(opacity) {
        return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
    };
    var get_json_data= function(){

      var my_labels = [], my_data = [];
      $.getJSON("perf_data.json", function(json){
      var insert_dataset = {'label': "Insert Performance", 'hidden': false, 'data': [], 'fill': true, 'borderDash': [5,5],
                            'borderColor': randomColor(0.4), 'backgroundColor': randomColor(0.5), 'pointBorderColor': randomColor(0.7),
                            'pointBackgroundColor': randomColor(0.5), 'pointBorderWidth': 1};
      var verify_dataset = {'label': "Verify Performance", 'hidden': false, 'data': [], 'fill': true, 'borderDash': [5,5],
                            'borderColor': randomColor(0.4), 'backgroundColor': randomColor(0.5), 'pointBorderColor': randomColor(0.7),
                            'pointBackgroundColor': randomColor(0.5), 'pointBorderWidth': 1};
      var update_dataset = {'label': "Update Performance", 'hidden': false, 'data': [], 'fill': true, 'borderDash': [5,5],
                            'borderColor': randomColor(0.4), 'backgroundColor': randomColor(0.5), 'pointBorderColor': randomColor(0.7),
                            'pointBackgroundColor': randomColor(0.5), 'pointBorderWidth': 1};
      var delete_dataset = {'label': "Delete Performance", 'hidden': false, 'data': [], 'fill': true, 'borderDash': [5,5],
                            'borderColor': randomColor(0.4), 'backgroundColor': randomColor(0.5), 'pointBorderColor': randomColor(0.7),
                            'pointBackgroundColor': randomColor(0.5), 'pointBorderWidth': 1};

      $.each(json, function (i, date_data) {
          //console.log(date_data);
          my_labels.push(date_data.datestamp);
          $.each(date_data.data, function(j, workload) {
            if (workload['op'] == "insert") {
              insert_dataset.data.push(parseFloat(workload.iops));
            } else if (workload['op'] == "verify" ) {
              verify_dataset.data.push(parseFloat(workload.iops));
            } else if (workload['op'] == "update" ) {
              update_dataset.data.push(parseFloat(workload.iops));
            } else if (workload['op'] == "delete" ) {
              delete_dataset.data.push(parseFloat(workload.iops));
           } else {
              console.log("Scomething went wrong w/ the data parsing.");
            }
          });
        });
        my_data.push(insert_dataset);
        my_data.push(verify_dataset);
        my_data.push(update_dataset);
        my_data.push(delete_dataset);
      })
    .fail(function (d, textStatus, error) {
      console.error("getJSON failed, status: " + textStatus + ", error: "+error)
      });
      return { "labels": my_labels , "datasets": my_data }; 
    };

    config = {};
    config['type'] = "line";
    config['data'] = get_json_data();
    config['options'] = {
            'responsive': true,
            'title':{
                'display':true,
                'text':'TOAD BVT performance'
            },
            'tooltips': {
                'mode': 'label',
                'callbacks': {
                    // beforeTitle: function() {
                    //     return '...beforeTitle';
                    // },
                    // afterTitle: function() {
                    //     return '...afterTitle';
                    // },
                    // beforeBody: function() {
                    //     return '...beforeBody';
                    // },
                    // afterBody: function() {
                    //     return '...afterBody';
                    // },
                    // beforeFooter: function() {
                    //     return '...beforeFooter';
                    // },
                    // footer: function() {
                    //     return 'Footer';
                    // },
                    // afterFooter: function() {
                    //     return '...afterFooter';
                    // },
                }
            }
          };
    config['hover'] = { 'mode': 'dataset' };
    config['scales'] = {
                'xAxes': [{
                    'display': true,
                    'scaleLabel': {
                        'show': true,
                        'labelString': 'Date'
                    }
                }],
                'yAxes': [{
                    'display': true,
                    'scaleLabel': {
                        'show': true,
                        'labelString': 'IOPS'
                    },
                    'ticks': {
                        'suggestedMin': 0,
                        'suggestedMax': 5000000
                    }
                }]
            };

    window.onload = function() {
        var ctx = document.getElementById("canvas").getContext("2d");
        window.myLine = new Chart(ctx, config);
    };

</script>
[
{
  "datestamp":"01/01/16",
   "data":[
      {"op":"insert", "iops":"83934.51429194942"},
      {"op":"verify", "iops":"15439.723320158104"},
      {"op":"update", "iops":"53198.20988023753"},
      {"op":"delete", "iops":"47994.31747281122"}
    ]
},
{
  "datestamp":"01/02/16",
  "data":[
      {"op":"insert", "iops":"84934.51429194942"},
      {"op":"verify", "iops":"14439.723320158104"},
      {"op":"update", "iops":"54198.20988023753"},
      {"op":"delete", "iops":"44994.31747281122"}
  ]
}
]