2017-06-08 57 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