【问题标题】:highchart, TypeError: obj is nullhighchart,类型错误:obj 为空
【发布时间】:2014-07-08 14:20:08
【问题描述】:

我想用PHP从html请求一个日期时间变量,

并使用该变量从mysql数据库中选择数据。然后制作一个json来生成highchart。

它成功生成了json但没有生成highchart。

我使用 Firebug,它说 TypeError: obj is null

这是我的代码
PHP

<?php
   header('Content-type: application/json');
   $con = mysql_connect("localhost","root","");
   mysql_select_db("project", $con);
    $month=$_REQUEST['select_month'];

   $sqlChart_Q="SELECT T,value FROM `Temperature`WHERE month(T)='$month'";
   $sqlChart_R=mysql_query($sqlChart_Q);
   while($arrChart_ROW=mysql_fetch_array($sqlChart_R)) {
        $time=strtotime($arrChart_ROW[0])*1000;
          $temp=(float)$arrChart_ROW[1];     
   $arrChart[]=array("time" => $time,"value" => $temp);
    }
    echo json_encode($arrChart);
     ?>

和js

     var chart;
     $(document).ready(function() {           
     var options = {
        chart: {
           renderTo: 'month',
           type: 'spline',
        },
        title: {
        },
        xAxis: {
           type: 'datetime'

        },
        yAxis: {
        },
        series: [{
           name: 'Temperature',
           data: [] 
        }] 
        };
        $.getJSON('PHP/db_month.php', function(json) {
        temp = [];
        $.each(json, function(key,value) {
        temp.push([value.time,value.value]);
              });         
        options.series[0].data = temp;           
        chart = new Highcharts.Chart(options);
        });
        });

json (select_month=5;$month=$_REQUEST['select_month'])

[{"time":1400076317000,"value":50},{"time":1400076322000,"value":25},{"time":1400076327000,"value":34},{"time":1400110911000,"value":50},{"time":1400110916000,"value":43},{"time":1400110919000,"value":75},{"time":1400110920000,"value":35},{"time":1400110922000,"value":46},{"time":1400110924000,"value":66},{"time":1400110925000,"value":73},{"time":1400113566000,"value":20},{"time":1400161118000,"value":55},{"time":1400186496000,"value":50},{"time":1400193165000,"value":43},{"time":1400196532000,"value":50}]

顺便说一下,当sql函数改成

    SELECT T,value FROM `Temperature`WHERE month(T)='5'

它会成功生成5月创建数据的highchart。

(PS:T的类型是时间戳,不知道有没有关系。

我的代码有什么问题? 有人可以帮我解决这个问题。 非常感谢你 !!

【问题讨论】:

    标签: javascript php mysql json highcharts


    【解决方案1】:

    您需要在 json_encode 函数中设置 JSON_NUMERIC_CHECK,因为您返回的是字符串,而不是数字。

    【讨论】:

    • 当我设置为echo json_encode($arrChart,JSON_NUMERIC_CHECK); 时,它显示`Warning:json_encode() 只需要 1 个参数,第 20 行给出 2 个参数
    • 对不起,我的PHP版本太旧了。现在我更新到新版本,echo json_encode($arrChart,JSON_NUMERIC_CHECK); 工作,但仍然没有高图
    • 看起来你有旧的 PHP,所以在你的情况下,你需要在 json 上使用循环和 parseFloat() 函数将字符串转换为数字。
    【解决方案2】:

    当您的查询返回空集时,未定义变量 $arrChart。你必须在循环之前定义这个变量。

    $arrChart = array();
    

    您的 sql 查询也不安全。你必须这样写:

    $sqlChart_Q = "SELECT T,value FROM `Temperature`WHERE month(T)=" . (int) $month;
    

    【讨论】:

    • 感谢您的回复!当我在 PHP 中添加$arrChart = array();时,生成了高图但没有数据。
    • 发生这种情况是因为您的查询没有返回任何数据。尝试检查: if (empty($_REQUEST['select_month'])。顺便说一下,使用 $_REQUEST 变量不是一个好主意。您必须使用 $_GET 数组(因为 $.getJSON 使用 GET HTTP 加载数据请求)。
    • 你的js代码有错误。您不发送 select_month 值。试试这个: $.getJSON('PHP/db_month.php', {select_month: your_month_value}, function(json) {...});
    • 感谢您的回复!!我将 $_REQUEST['select_month'] 更改为 $_GET['select_month'] 并且我确信 $_REQUEST['select_month'] 不为空,因为它可以成功生成 json。我能问你为什么 $.getJSON('PHP/db_month.php', {select_month: your_month_value}, function(json) {...}) 以及 your_month_value 是什么意思吗?非常感谢你
    • 现在我知道$.getJSON('PHP/db_month.php', {select_month: your_month_value}, function(json) 是什么意思了。但是 your_month_value 可以是 php 的变量吗??
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2015-03-06
    • 2013-07-20
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    相关资源
    最近更新 更多