2017-06-08 20 views
0

我想通过使用Google图表API来绘制线条图,并且我使用PHP codeignitor从mySQL数据库检索数据。如何从parseJSON数组中获取每个数据

到目前为止,我能够检索数据,但我无法解析Json数据,并将它们填充到折线图中。下面是我实际加载的视图。

<html> 
<head> 
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    var BASE_URL = "<?php echo base_url(); ?>"; 
    </script> 
<script type="text/javascript"> 
    // Load the Visualization API and the line package. 
    google.charts.load('current', {'packages':['corechart']}); 
    // Set a callback to run when the Google Visualization API is loaded. 
    google.charts.setOnLoadCallback(drawChart); 

function drawChart() { 

    $.ajax({ 

    type: 'POST', 
    url: BASE_URL+'index.php/Chart_varnish/getdata', 
    dataType: "json", 



    success: function (data1) { 
    // Create our data table out of JSON data loaded from server. 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'timeline'); 
    data.addColumn('string', 'solid'); 
    var jsonData = $.parseJSON(data1); 

    for (var i = 0; i < jsonData.length; i++) { 
     data.addRows([jsonData[i].timeline, jsonData[i].solid_t1]); 
    } 
    var options = { 

    title: 'Solid chart', 
    width: 900, 
    height: 500, 

    }; 

    var chart = new google.visualization.LineChart(document.getElementById('line_chart')); 
    chart.draw(data, options); 
    } 
}); 
} 
    </script> 
</head> 
<body> 

    <div id="line_chart"></div> 
</body> 
</html> 

这下是在我的控制器功能的GetData:

function getdata(){ 
    $this->load->model('Chart'); 
    $this->load->helper('url'); 
    $data = $this->Chart->getdata_solid(); 
    print_r(json_encode($data, true)); 
} 

我试图输出json_encode数据,我能得到下面的结果:

[{"timeline":"430","solid_t1":"12"},{"timeline":"030","solid_t1":"8.1"},{"timeline":"830","solid_t1":"32"},{"timeline":"1230","solid_t1":"10"},{"timeline":"1630","solid_t1":"100"},{"timeline":"2030","solid_t1":"8"}] 

灿有人帮助我,谢谢。

更新

嗨,大家好,我把函数在我的模型这里,也许是因为我的查询结果是数组,而不是一个对象?

function getdata_solid(){ 
    $this->db->select('timeline'); 
    $this->db->select('solid_t1'); 
    $this->db->from("varnish_mvs"); 
    $this->db->where('date_selected', '2017-03-25'); 
    //$this->db->where('timeline', $timeline); 
    $query = $this->db->get(); 
    return $query->result_array(); 

} 

最后更新:我终于通过改变装载谷歌图表功能的方式解决了这个问题。这里是我最后的工作代码。我希望这可以帮助有同样问题的人。

$(document).ready(function() { 

    $.ajax({ 

    type: 'POST', 
    //url: 'http://localhost/charts/charts/getdata', 
    url: BASE_URL+'index.php/Chart_varnish/getdata', 
    dataType: "JSON", 
    success: function (data1) { 

    // alert(data1); 
     // Load the Visualization API and the line package. 
    google.charts.load('current', {'packages':['corechart']}); 
    // Set a callback to run when the Google Visualization API is loaded. 
    google.charts.setOnLoadCallback(function(){ 
    drawChart(data1); 
    }); 

    } 
}); 

    function drawChart(data1) { 

     var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'timeline'); 
    data.addColumn('number', 'solid_t1'); 
    var dataArray = []; 
    /*$.each(data1, function(i, obj){ 
    dataArray.push([obj.timeline, parseInt(obj.solid_t1)]); 
    });*/ 
    var jsonData = $.parseJSON(data1); 
    for (var i = 0; i < jsonData.length; i++) { 
     dataArray.push([jsonData[i].timeline, parseInt(jsonData[i].solid_t1)]); 
     } 
    //dataArray.push([jsonData[0].timeline, parseInt(jsonData[0].solid_t1)], [jsonData[1].timeline, parseInt(jsonData[1].solid_t1)]) 
    //dataArray.push(['2', 3], ['6', 5]); 
    alert(dataArray); 
    data.addRows(dataArray); 
    var options = { 
    title:'Solid chart', 
    width: 900, 
    height: 500, 
    }; 
    var chart = new google.visualization.LineChart(document.getElementById('line_chart')); 
    chart.draw(data, options); 
    } 

}); 

+0

尝试后更换'的print_r(json_encode($数据,真));'到'回波(json_encode($数据,真));' –

+0

'json_encode(混合$值[摘要$选项= 0 ]) - 第二个参数不应该是true/false – RamRaider

+0

我试过'回声',也试过把'假',它现在仍然显示图表 – Vito

回答

0

dataType: "json", 

确保您作为响应(documentation here)JSON期待,所以你不需要做

var jsonData = $.parseJSON(data1); 

data1已经是一个JavaScript对象

+0

感谢您的答案,我试图删除'var jsonData = $ .parseJSON (data1);',但它不起作用。 – Vito

+0

你能提供有关错误的详细信息吗? –

+0

这是问题,我没有任何错误消息。刚刚拿到一个空白页面。如果我不使用JSON数据,只需手动输入一些数据,我可以在我的页面上看到一个线条图。 – Vito

0

尝试使用此

$.post(BASE_URL+'index.php/Chart_varnish/getdata',function(data1){ 
     $.each(data1,function(index,value){ 
     data.addColumn(value.timeline,value.solid_t1); 
     }); 
//more CODE HERE 
    },'JSON'); 

我希望它会帮助你解决问题。你也应该像这样回显json

echo json_encode($data1); 
+0

你好,我是ajax的新手,也是编程新手。你能否给我更多关于如何应用你的代码的指南?我应该更换我所有的ajax,然后把你的代码放到位?预先感谢您的回复。 – Vito

+0

你好,对于最近的回复感到抱歉..请阅读本文的文档..如果你有更多的问题。 IM高兴地帮助你.. https://api.jquery.com/jquery.post/ –

+0

感谢您的帮助,我需要了解它是如何工作的,然后才能继续。 – Vito

0

假设PHP脚本的响应是JSON数据,那么你可以像这样处理响应数据。

function drawChart() { 
    $.ajax({ 
     type: 'POST', 
     url: BASE_URL + 'index.php/Chart_varnish/getdata', 
     dataType: 'json', 
     success: function(response) { 
      var dataTbl = new google.visualization.DataTable(); 
       /* a number for at least 1 column is req'd ? */ 
       dataTbl.addColumn('string', 'timeline'); 
       dataTbl.addColumn('string', 'solid'); 

      /* iterate through the response data */ 
      for(var n in response){ 
       if(response[n] && typeof(response[n])=='object'){ 
        dataTbl.addRows(response[n].timeline, response[n].solid_t1); 
       } 
      } 
      var options = { 
       title: 'Solid chart', 
       width: 900, 
       height: 500, 

      }; 
      var chart = new google.visualization.LineChart(document.getElementById('line_chart')); 
       chart.draw(dataTbl, options); 
     } 
    }); 
} 

PHP脚本只需要使用json_encode - 第二个参数可以是标志(预定义常量)的按位组合,而不是简单的真/假 - 这是使用/真/假,因为它是json_decode功能第二个参数。

function getdata(){ 
    $this->load->model('Chart'); 
    $this->load->helper('url'); 
    $data = $this->Chart->getdata_solid(); 

    /* echo rather than print_r */ 
    echo json_encode($data); 
} 
+0

我试图将你的代码复制到我的脚本,但是,我仍然无法得到图表。我如何知道PHP脚本的响应是否是JSON数据? – Vito

+0

在浏览器中使用控制台并查看响应数据。 – RamRaider

+0

我得到了这样的错误消息:在Function.handleSuccess 指数:62遗漏的类型错误:在Object.success无法读取空 的特性“长度”(62指数)(jquery.min.js:141) 在XMLHttpRequest的.w.onreadystatechange(jquery.min.js:140) – Vito