doushu5451 2015-11-03 09:41
浏览 46
已采纳

Morris Js和Codeigniter从控制器传递数据

I have the following controller which picks data from my DBase :

function chart_js() {

    $rows = '';
    $query = "SELECT clnt_id,date_added FROM job_card ORDER BY date_added DESC LIMIT 0, 5";
    $result = $this->db->query($query);
    $total_rows = $result->num_rows;
    if ($result) {
        $rows = $result->result_array();
    }
    print json_encode($rows, JSON_NUMERIC_CHECK);

}

And passes it to json_encode in the following format :

[{"clnt_id": 10, "date_added": "2015-11-02 12:28:01"}, {"clnt_id": 11, "date_added": "2015-11-01 07:06:56"} , {"clnt_id": 9, "date_added": "2015-10-30 22:14:48"}, {"clnt_id": 7, "date_added": "2015-10-30 06:15:55"}, {"clnt_id": 10, "date_added": "2015-10-30 06:03:50"}]

The data above is the exact format of how the data is returned. I have used the above data to plot a static line graph and it worked very well. Below is my view :

<body class="nav-md">
        <div class="panel panel-default">
            <div class="panel-heading">
                <i class="fa fa-bar-chart-o fa-fw"></i> Account Registrations Past 7 days
            </div>
            <!-- /.panel-heading -->
            <div class="panel-body">
                <div id="acctregs" style="height: 300px;"></div>
            </div>
            <!-- /.panel-body -->
        </div>



        <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
        <script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>


        <script>
            $(document).ready(function () {
                var acct_regs = [{"clnt_id": 10, "date_added": "2015-11-02 12:28:01"}, {"clnt_id": 11, "date_added": "2015-11-01 07:06:56"}
                    , {"clnt_id": 9, "date_added": "2015-10-30 22:14:48"}, {"clnt_id": 7, "date_added": "2015-10-30 06:15:55"}, {"clnt_id"
                                : 10, "date_added": "2015-10-30 06:03:50"}];
                var acctregs = new Morris.Line({
                    // ID of the element in which to draw the chart.
                    element: 'acctregs',
                    // Chart data records -- each entry in this array corresponds to a point on
                    // the chart.
                    data: acct_regs,
                    // The name of the data record attribute that contains x-values.
                    xkey: 'date_added',
                    // A list of names of data record attributes that contain y-values.
                    ykeys: ['clnt_id'],
                    // Labels for the ykeys -- will be displayed when you hover over the
                    // chart.
                    labels: ['Value'],
                    dateFormat: function (x) {
                        return new Date(x).toString().split("00:00:00")[0];
                    }
                });
            });

        </script>

</body>

However when I try to retrieve this data from the controller which interacts with the Dbase by replacing the var acct_regs to :

var acct_regs = "<?php echo site_url('operations/char_js'); ?>";

I get the following error :

TypeError: a is undefined
    ...,h,i,j,k,l;return"number"==typeof a?a:(c=a.match(/^(\d+) Q(\d)$/),e=a.match(/^(\...

from morris.min.js. What is the best way to pass this data from controller to view so that it can display dynamic graphs?

  • 写回答

1条回答 默认 最新

  • doujinyi1267 2015-11-03 09:48
    关注

    You need to ajax the data use $.getJSON

    Try:

    $.getJSON("<?php echo site_url('operations/char_js'); ?>", function (json) { 
                var acctregs = new Morris.Line({
                            // ID of the element in which to draw the chart.
                            element: 'acctregs',
                            // Chart data records -- each entry in this array corresponds to a point on
                            // the chart.
                            data: json,
                            // The name of the data record attribute that contains x-values.
                            xkey: 'date_added',
                            // A list of names of data record attributes that contain y-values.
                            ykeys: ['clnt_id'],
                            // Labels for the ykeys -- will be displayed when you hover over the
                            // chart.
                            labels: ['Value'],
                            dateFormat: function (x) {
                                return new Date(x).toString().split("00:00:00")[0];
                            }
                        });
            });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现