对存储的响应出错.get: TypeError: Cannot read property 'style'

Error in response to storage.get: TypeError: Cannot read property 'style' of null

本文关键字:read style property Cannot TypeError 存储 响应 出错 get      更新时间:2023-09-26

我试图从oracle数据库获取数据到使用GoogleCharts的LineChart,但我总是遇到一些错误。

如果有人能帮助我,我将不胜感激!

下面是获取折线图的脚本:
<html>
<head>

    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">

    $( document ).ready(function() {
      google.load("visualization", "1", {packages:["corechart"]});
        google.setOnLoadCallback(drawChart);
        function drawChart (callback) {
        var jsonData = $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url:"getData.php",
            dataType:"json",
            async:false,

        }).responseText;
        //Create our data table out of JSON data loaded from server
        var data = new google.visualization.DataTable(jsonData);
        //PieCharts expects 2 columns of data: a label and a value, so we need to use a DataView to restrict to 2 columns
        var view = new google.visualization.DataView(data);
        view.setColumns([0, 1]);

        var options = {
      title: 'Whatever'
    };
        //Instantiate and draw our chart, passing in some options
        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    }
    });


    </script>
</head>
<body>
     <!--Div that will hold the pie chart-->
<div id="chart_div">Test</div>
</body>

下面是Phpscript将数据放入表:
    <?php 


//On exécute la requete




//on appelle la page connexion
include 'connexion.php';
//La requete
$query = "
select A.*  
from (
SELECT 
         EB_RESULTAT_DTM.VALEUR AS EB_RESULTAT_VALEUR, 
         EB_RESULTAT_DTM.INSERT_DATE AS EB_RESULTAT_INSERT_DATE,
         rank() over (partition by EB_INDICATEUR_DTM.INDICATEUR_NUM,to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymm') order by to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymmdd') asc) as rang,
         to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymm') as MOIS_M
    FROM COMPTEUR_OWNER.EB_DOMAINE_DTM EB_DOMAINE_DTM
         INNER JOIN
         COMPTEUR_OWNER.EB_INDICATEUR_DTM EB_INDICATEUR_DTM
            ON EB_DOMAINE_DTM.EB_DOMAINE_DTM_NUM =
                  EB_INDICATEUR_DTM.X_EB_DOMAINE_DTM_NUM
         INNER JOIN
         COMPTEUR_OWNER.EB_RESULTAT_DTM EB_RESULTAT_DTM
            ON EB_INDICATEUR_DTM.INDICATEUR_NUM =
                  EB_RESULTAT_DTM.X_EB_INDICATEUR_DTM_NUM
   WHERE     EB_INDICATEUR_DTM.INDICATEUR_NUM = 106
         AND EB_RESULTAT_DTM.INSERT_DATE BETWEEN ADD_MONTHS (SYSDATE, -9) 
                                               AND SYSDATE
) a where a.rang=1
";
$stid = oci_parse($conn, $query);
oci_execute($stid);
$table = array();
$table['cols'] = array(
    /* define your DataTable columns here
     * each column gets its own array
     * syntax of the arrays is:
     * label => column label
     * type => data type of column (string, number, date, datetime, boolean)
     */
    array('label' => 'Nombres', 'type' => 'number'),
    array('label' => 'Date', 'type' => 'date'),
    // etc...
);
$rows = array();
while($r = oci_fetch_assoc($stid)) {
    $temp = array();
    // each column needs to have data inserted via the $temp array
    $temp[] = array('v' => $r['EB_RESULTAT_VALEUR']);
    $temp[] = array('v' => $r['EB_RESULTAT_INSERT_DATE']);
    // etc...
    // insert the temp array into $rows
    $rows[] = array('c' => $temp);
}
// populate the table with rows of data
$table['rows'] = $rows;
    // encode the table as JSON
    $jsonTable = json_encode($table);

    // return the JSON data
    echo $jsonTable;
    ?>

我曾经收到过这样的消息:

Error in response to storage.get: TypeError: Cannot read property 'style' of null

或:

undefined is not a function

我可以看到一些错误。首先,您在arrayToDataTable方法中解析错误的对象:

var data = google.visualization.arrayToDataTable($.parseJSON(drawChart));
应:

var data = google.visualization.arrayToDataTable($.parseJSON(jsonData));

那么,列的顺序就不对了。LineCharts期望x轴值(您的日期)是第一列,然后是第二列的y值。此外,您需要将数字输出为数字而不是字符串;只需将JSON_NUMERIC_CHECK添加到json_encode函数调用中:

echo json_encode($rows, JSON_NUMERIC_CHECK);

所以我已经改变了PHP和脚本,但现在得到另一个错误消息:

Uncaught Error: Not an array 

这里是php getData2.php:

<?php

include 'connexion.php';
//

$sql  = oci_parse($conn, "select A.*  
from (
SELECT 
         EB_RESULTAT_DTM.VALEUR AS EB_RESULTAT_VALEUR, 
         EB_RESULTAT_DTM.INSERT_DATE AS EB_RESULTAT_INSERT_DATE,
         rank() over (partition by EB_INDICATEUR_DTM.INDICATEUR_NUM,to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymm') order by to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymmdd') asc) as rang,
         to_char(EB_RESULTAT_DTM.INSERT_DATE,'yyyymm') as MOIS_M
    FROM COMPTEUR_OWNER.EB_DOMAINE_DTM EB_DOMAINE_DTM
         INNER JOIN
         COMPTEUR_OWNER.EB_INDICATEUR_DTM EB_INDICATEUR_DTM
            ON EB_DOMAINE_DTM.EB_DOMAINE_DTM_NUM =
                  EB_INDICATEUR_DTM.X_EB_DOMAINE_DTM_NUM
         INNER JOIN
         COMPTEUR_OWNER.EB_RESULTAT_DTM EB_RESULTAT_DTM
            ON EB_INDICATEUR_DTM.INDICATEUR_NUM =
                  EB_RESULTAT_DTM.X_EB_INDICATEUR_DTM_NUM
   WHERE     EB_INDICATEUR_DTM.INDICATEUR_NUM = 106
         AND EB_RESULTAT_DTM.INSERT_DATE BETWEEN ADD_MONTHS (SYSDATE, -9) 
                                               AND SYSDATE
) a where a.rang=1");
oci_execute($sql);
//while (($row = oci_fetch_array($sql, OCI_BOTH)) != false) {
    // Utilisez des noms de colonne en majuscule pour les indices des tableau associatif
   // echo $row['EB_RESULTAT_VALEUR'];
 //   echo $row['EB_RESULTAT_INSERT_DATE'];
//}
//json_encode($row);
$rows = Array();
while($row = oci_fetch_array($sql, OCI_BOTH)){
     array_push($rows, $row[0], $row[1]);
}
echo json_encode($rows);
    oci_free_statement($sql);
    oci_close($conn);
?>

返回如下:

["9415094","14'/09'/13 14:39:56,000000","9419954","02'/11'/13 13:25:26,000000","9355868","07'/12'/13 13:25:58,000000","9369691","04'/01'/14 13:24:19,000000","9385231","01'/02'/14 13:26:36,000000","9414700","01'/03'/14 13:26:28,000000"]
下面是index_4.php (script):
<html>
<head>
    <title>Donné volumétrique</title>
    <!-- Load jQuery -->
    <script language="javascript" type="text/javascript" 
        src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
    </script>
    <!-- Load Google JSAPI -->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);
        function drawChart() {
            var jsonData = $.ajax({
                url: "getData2.php",
                dataType: "json",
                async: false
            }).responseText;
            var data = google.visualization.arrayToDataTable($.parseJSON(drawChart));
            var options = {
                title: 'Donnée Volumétrique'
            };
            var chart = new google.visualization.LineChart(
                        document.getElementById('chart_div'));
            chart.draw(data, options);
        }
    </script>
</head>
<body>
    <div id="chart_div" style="width: 900px; height: 500px;">
    </div>
</body>
</html>

我得到的结果是:

http://imgur.com/w8jexhJ "Error message"


编辑1:$rows = Array(); to $rows = Array(array('Nombres', 'Date'));

array_push($rows, $row[0], $row[1]); to array_push($rows, array($row[0], $row[1]));

get: [["Nombres","Date"],["9419954","02'/11'/13 13:25:26,000000"],["9355868","07'/12'/13 13:25:58,000000"],["9369691","04'/01'/14 13:24:19,000000"],["9385231","01'/02'/14 13:26:36,000000"],["9414700","01'/03'/14 13:26:28,000000"]]