Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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
Javascript JSON$ajax问题_Javascript_Php_Html_Json_Google Visualization - Fatal编程技术网

Javascript JSON$ajax问题

Javascript JSON$ajax问题,javascript,php,html,json,google-visualization,Javascript,Php,Html,Json,Google Visualization,我试图从一个JSON文件中创建一个google图表,但我看不到错误。 这是我的php,它处理JSON数据文件。 php代码工作正常,它给了我以下信息: [Durata pedeapsa]、[3”、“4”、“7”、“2”、“5”、“1”、“2”、“2”、“2”、“4”、“1”] 但是,我无法将其加载到html中 <?php //Oracle DB user name $username = 'TW'; // Oracle DB user password $password = 'TW';

我试图从一个JSON文件中创建一个google图表,但我看不到错误。 这是我的php,它处理JSON数据文件。 php代码工作正常,它给了我以下信息:

[Durata pedeapsa]、[3”、“4”、“7”、“2”、“5”、“1”、“2”、“2”、“2”、“4”、“1”]

但是,我无法将其加载到html中

<?php
//Oracle DB user name
$username = 'TW';

// Oracle DB user password
$password = 'TW';

// Oracle DB connection string
$connection_string = 'localhost/xe';

//Connect to an Oracle database
$connection = oci_connect(
    $username,
    $password,
    $connection_string
);

$stid = oci_parse($connection, 'SELECT to_number(substr(durata_pedeapsa,0,1)) as "pedeapsa" , COUNT(DURATA_PEDEAPSA) as "count" FROM DETINUTI group by substr(durata_pedeapsa,0,1)');
if (!$stid) {
    $e = oci_error($connection);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$r = oci_execute($stid);
if (!$r) {
    $e = oci_error($stid);
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

# set heading   
    $data[0] = array('Durata pedeapsa','count');
    $i=1;
        while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS)) != false) {
            $pedeapsa = $row['pedeapsa'];
            $count = $row['count'];
            $data[$i] = array($pedeapsa,$count);
            $i = $i +1;
        }
echo json_encode($data);
oci_close($connection);
?>

使用$.ajax()的成功回调方法将数据加载到图表中,不要调用JSON.stringify(),因为google图表接受jquery对象而不是JSON字符串。
您的drawChart()函数应该如下所示

function drawChart() {
    $.ajax({
    url: "/test.php",
            dataType: "json",
            success:function (res) {
                var jsonData = res.responseText;
                var data = google.visualization.arrayToDataTable(jsonData);
                var options = {title: 'Suji'};
                var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
                chart.draw(data, options);
         }
    });
} 

我希望它能工作,并且您的php脚本返回有效的json。

用这个替换您的js代码

 <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);

        function drawChart() {
            var jsonData = $.ajax({
                url: "/test.php",
                dataType: "json",
                async: false
            }).responseText;

            //var obj = JSON.parse(jsonData);
           // var data = google.visualization.arrayToDataTable(obj);
             var dataTable = new google.visualization.DataTable();
             dataTable.addColumn('string', 'Durata pedeapsa');
            dataTable.addColumn('number', 'Count');

           // dataTable.addRows([jsonData]);
            dataTable.addRows(JSON.parse(jsonData));  


            var options = {title: 'Suji'};

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

    </script>
也可以将计数值转换为整数

范例

$data[$i] = array($pedeapsa,(int)$count);
现在您的php文件数据将返回-

[["3",4],["7",2],["5",1],["2",2],["4",1]]

首先,建议在
这将允许您直接创建数据表

PHP

# set heading
$data = array();

$data['cols'] = array(
  array('label' => 'Durata pedeapsa', 'type' => 'string'),
  array('label' => 'count', 'type' => 'number')
);

$data['rows'] = array();
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS)) != false)
  $data['rows'][] = array('c' => array(
    array('v' => (string) $row['pedeapsa']),
    array('v' => (int) $row['count'])
  ));
}
echo json_encode($data);

其次,不需要两个谷歌图表库

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

你为什么要把它串起来?使用同步调用是不好的做法,我不知道如何使用JSON。我必须为明天做一个项目,这是我在互联网上找到的。有什么提示吗?如果您对JSON数据进行字符串化,您可以将可读的和可利用的数据(具有层次结构)转换为线性字符链。因此,这对于构建图表是不起作用的。另外,不要使用
async:false
。曾经没有任何意义,它会导致糟糕的用户体验,而且它已被弃用。您是否尝试过我的edted答案Teodor O。事实上,它返回以下内容:{“1”:[“3”,4],“2”:[“7”,2],“3”:[“5”,1],“4”:[“2”,2],“5”:[“4”,1]}它也不起作用。仍然是空白页不幸的是这不起作用。还是空白页。
# set heading
$data = array();

$data['cols'] = array(
  array('label' => 'Durata pedeapsa', 'type' => 'string'),
  array('label' => 'count', 'type' => 'number')
);

$data['rows'] = array();
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS)) != false)
  $data['rows'][] = array('c' => array(
    array('v' => (string) $row['pedeapsa']),
    array('v' => (int) $row['count'])
  ));
}
echo json_encode($data);
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
google.charts.load('current', {
  callback: drawChart,
  packages: ['corechart']
});

function drawChart() {
  $.ajax({
    url: "/test.php",
    dataType: "json",
  }).done(function (jsonData) {
    var data = new google.visualization.DataTable(jsonData);
    var options = {title: 'Suji'};
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  });
}