Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Php 如何从parseJSON数组中获取每个数据_Php_Mysql_Json_Ajax_Codeigniter - Fatal编程技术网

Php 如何从parseJSON数组中获取每个数据

Php 如何从parseJSON数组中获取每个数据,php,mysql,json,ajax,codeigniter,Php,Mysql,Json,Ajax,Codeigniter,我正在尝试使用GoogleChartAPI绘制一个折线图,并使用PHP codeignitor从mySQL数据库检索数据 到目前为止,我能够检索数据,但我无法解析Json数据,并将其填充到折线图中。下面是我实际加载的视图 <html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <scrip

我正在尝试使用GoogleChartAPI绘制一个折线图,并使用PHP codeignitor从mySQL数据库检索数据

到目前为止,我能够检索数据,但我无法解析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>
我尝试输出json_编码数据,结果如下:

[{"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();

}
最终更新:我最终通过改变加载谷歌图表功能的方式解决了这个问题。下面是我最后的工作代码。我希望它能对有同样问题的人有所帮助

$(文档).ready(函数(){
$.ajax({
键入:“POST”,
//网址:'http://localhost/charts/charts/getdata',
url:BASE_url+'index.php/Chart_varnish/getdata',
数据类型:“JSON”,
成功:功能(数据1){
//警报(数据1);
//加载可视化API和行包。
load('current',{'packages':['corechart']});
//将回调设置为在加载Google Visualization API时运行。
google.charts.setOnLoadCallback(函数(){
图纸(数据1);
});
}
});
功能绘图图(数据1){
var data=new google.visualization.DataTable();
data.addColumn('string','timeline');
data.addColumn('number','solid_t1');
var dataArray=[];
/*$。每个(数据1,函数(i,obj){
push([obj.timeline,parseInt(obj.solid_t1)]);
});*/
var jsonData=$.parseJSON(数据1);
对于(var i=0;i
这个

确保您期望json作为响应(),因此您不需要这样做

var jsonData = $.parseJSON(data1);
data1
已经是一个javascript对象

尝试使用此

    $.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);

假设来自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\u encode
——第二个参数可以是标志(预定义常量)的按位组合,而不是简单的true/false;
json\u decode
函数使用/true/false作为第二个参数

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

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

感谢您的回答,我试图删除'var jsonData=$.parseJSON(data1);',但它不工作。这是问题,我没有任何错误消息。只是得到了一张空白页。如果我不使用JSON数据,只需手动输入一些数据,我就可以在页面上看到一个折线图。首先,尝试console.log data来验证脚本是否正确检索数据。感谢IIario,我收到如下错误消息:index:62 Uncaught TypeError:无法读取Object.success处null的属性“length”(index:62)在XMLHttpRequest.w.onreadystatechange(jquery.min.js:140)的Function.handleSuccess(jquery.min.js:141)中执行
console.log(data1)
?那是威德。。。在调试期间,您是否对代码的剩余部分进行了注释?请在replace
print_r(json_encode($data,true))之后重试
to
echo(json_encode($data,true))
json\u encode(mixed$value[,int$options=0])
-第二个参数不应为true/false我尝试了“echo”,也尝试了“false”,它现在仍然显示图表您好,我对ajax不熟悉,也不熟悉编程。你能给我更多关于如何应用你的代码的指导吗?我应该替换我所有的ajax,然后将代码放在适当的位置?提前感谢您的回复。您好,很抱歉回复太晚。。请阅读本文文档。。如果你有更多的问题。我很乐意帮助你。。谢谢你的帮助,在继续之前,我确实需要了解它是如何工作的。你可以应用上面的代码。我只是改变了你的ajax方式。你可以把你的谷歌绘图放在“更多代码在这里”这行。我试着把你的代码复制到我的脚本中,但是,我仍然无法得到图表。我如何知道PHP脚本的响应是否是JSON数据?使用浏览器中的控制台查看响应数据。我得到如下错误消息:index:62 Uncaught TypeError:not read属性'length'在Object.success(index:62)在Function.handleSuccess(jquery.min.js:141)在XMLHttpRequest.w.onreadystatechange(jquery.min.js:140)
echo json_encode($data1);
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 );
        }
    });
}
function getdata(){
    $this->load->model('Chart');
    $this->load->helper('url');
    $data  = $this->Chart->getdata_solid();

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