javascript - 未捕获( promise )错误 : Container is not defined

标签 javascript jquery ajax google-visualization pygooglechart

我在我的 Code-Igniter 应用程序中使用了谷歌图表(饼图)。我在我的仪表板 View 页面上显示图表,我得到了正确的结果。但是当我检查其他页面时出现错误

Uncaught (in promise) Error: Container is not defined.

错误:

Uncaught (in promise) Error: Container is not defined

at gvjs_3m (jsapi_compiled_default_module.js:66)

at gvjs_9K.gvjs_7p [as constructor] (jsapi_compiled_default_module.js:232)

at gvjs_9K.gvjs_8K [as constructor] (jsapi_compiled_ui_module.js:979)

at new gvjs_9K (jsapi_compiled_ui_module.js:1010)

at drawChart (landlordAdd:648)

at landlordAdd:623

at

我的图表代码:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

  <script type="text/javascript">
    $(document).ready(function(){
      $.ajax({
        url: "<?php echo base_url().'Dashboard/chartData'; ?>",
        dataType: "JSON",
        success:function(result){
          google.charts.load('current',{
            'packages':['corechart']
          });
          google.charts.setOnLoadCallback(function(){
            drawChart(result);
          });
          //alert(result);
        }
      });

      function drawChart(result) {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Name');
        data.addColumn('number', 'defects');

        var dataArray = [];

        $.each(result, function(i, obj) {
          dataArray.push([obj.name, parseInt(obj.defects)]);
        });

        data.addRows(dataArray);

        var piechart_options = {
          title : 'Defects Registered',
          width : 500,
          height: 300,
          is3D: true,
        };
        var piechart = new google.visualization.PieChart(document.getElementById('piechart_div'));
        piechart.draw(data, piechart_options);
      }
    });
  </script>

HTML 代码:

<div class="box-body">
    <table class="columns">
        <tr>
            <td>
                <div class="col-md-6" id="piechart_div"></div>
            </td>
            <td>
                <div class="col-md-6" id="donutchart_div"></div>
            </td>
        </tr>
    </table>
</div>

我很困惑为什么我会在其他页面上收到该错误,而不是在仪表板上收到错误?

欢迎任何形式的帮助,在此先感谢。

最佳答案

虽然这可能无法解决您的问题,
你实际上可以使用 google.charts.load 而不是 --> $(document).ready
默认情况下,google.charts.load 将等待文档准备就绪

推荐一些不同的设置...

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">

google.charts.load('current', {
  packages:['corechart']
}).then(function () {
  $.ajax({
    url: "<?php echo base_url().'Dashboard/chartData'; ?>",
    dataType: "JSON",
    success:function(result){
      drawChart(result);
    }
  });

  function drawChart(result) {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Name');
    data.addColumn('number', 'defects');

    var dataArray = [];

    $.each(result, function(i, obj) {
      dataArray.push([obj.name, parseInt(obj.defects)]);
    });

    data.addRows(dataArray);

    var piechart_options = {
      title : 'Defects Registered',
      width : 500,
      height: 300,
      is3D: true,
    };
    var piechart = new google.visualization.PieChart(document.getElementById('piechart_div'));
    piechart.draw(data, piechart_options);
  }
});

</script>

但你需要检查是否所有页面都抛出错误,
有一个 div 元素,其中包含绘制图表时使用的 id ...

// check for div with proper id
var piechart = new google.visualization.PieChart(document.getElementById('piechart_div'));

错误回调中替换硬编码数据,
您发布的代码工作正常...

请参阅以下工作片段

google.charts.load('current', {
  packages:['corechart']
}).then(function () {
  $.ajax({
    url: "<?php echo base_url().'Dashboard/chartData'; ?>",
    dataType: "JSON",
    success: function(result){
      drawChart(result);
    },
    error: function () {
      var result = [
        {name: 'defect 1', defects: '1'},
        {name: 'defect 2', defects: '2'},
        {name: 'defect 3', defects: '3'},
        {name: 'defect 4', defects: '4'},
        {name: 'defect 5', defects: '5'}
      ];

      drawChart(result);
    }
  });

  function drawChart(result) {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Name');
    data.addColumn('number', 'defects');

    var dataArray = [];

    $.each(result, function(i, obj) {
      dataArray.push([obj.name, parseInt(obj.defects)]);
    });

    data.addRows(dataArray);

    var piechart_options = {
      title : 'Defects Registered',
      width : 500,
      height: 300,
      is3D: true,
    };
    var piechart = new google.visualization.PieChart(document.getElementById('piechart_div'));
    piechart.draw(data, piechart_options);
  }
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="box-body">
    <table class="columns">
        <tr>
            <td>
                <div class="col-md-6" id="piechart_div"></div>
            </td>
            <td>
                <div class="col-md-6" id="donutchart_div"></div>
            </td>
        </tr>
    </table>
</div>

关于javascript - 未捕获( promise )错误 : Container is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333871/

相关文章:

javascript - Bootstrap Vue b-toast 不会触发第二次

php - 将用户制作的 SVG (raphael.js) 发送到服务器 (php),以便通过电子邮件发送

javascript - 使用 Javascript 从外部页面获取 innerhtml

javascript - JQuery 显示来自可见 HTML 表格单元格的文本的串联列表

ajax - Jquery Ajax - 响应应该替换 html

javascript - 如何在可调整大小的 Canvas 中正确获取鼠标坐标?

javascript - Angular 文本 ng-minlength 当不为空时?

javascript - 如何读取 handlebars block 表达式模板中的其他数据?

jquery - 发送一个简单的 GET 请求

jquery - 向 spring 安全登录发送 ajax 请求