0

我对 javascript (jquery/json) 很陌生,我已经编写了这段代码来渲染一个CanvasJS带有 php/json 数据获取脚本的图表。

但是,当我在其中实现代码时,图表不会显示。当我Console.log()在网络浏览器中使用它来查找 ReferenceError 时,它说:Can't find variable: $ ...Chart.html:11

我尝试了很多事情,并且阅读了许多 [重复] 问题/答案,说我没有加载 Jquery 库和许多其他选项。我试过实现这一行:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"> </script>

而且我尝试了很多变量,但我认为我不明白我可以在我拥有的这两个代码中使用更多..

任何指向正确方向的点都会很棒。

图表.html

<!DOCTYPE HTML>
<html>
<script type="text/javascript" src="canvasjs.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"> </script>


<head>
    <script type="text/javascript">

                $(document).ready(function () {

                $.getJSON("data.php", function (result) {

                var dataPoints = [];

                for (var i = 0; i <= result.length - 1; i++) {
                dataPoints.push({ x: Number(result[i].x), y: Number(result[i].y) });
                }

                var chart = new CanvasJS.Chart("chartContainer", {
                data: [
                {
                dataPoints: dataPoints
                }
                ]
                });

                chart.render();
                });
        });


</script>

</head>
<body>
    <div id="chartContainer" style="height: 300px; width:100%;">
    </div>
</body>
</html>

在上面的代码中,它涉及这部分:

$(文档).ready(函数 () {

以及用于获取 JSON 数据的我的 php:data.php

 <?php
    //header('Content-Type: application/json');

    $con = mysqli_connect("localhost","root","","WebApplication");

    // Check connection
    if (mysqli_connect_errno($con))
    {
        echo "Failed to connect to DataBase: " . mysqli_connect_error();
    } 
    else
    {
    $data_points = array();

    $result = mysqli_query($con, "SELECT * FROM info");

    while($row = mysqli_fetch_array($result))
    {        
        $point = array("x" => $row['id'] , "y" => $row['acceleration']);

        array_push($data_points, $point);        
    }

        $json =  json_encode($data_points, 32); //define('JSON_NUMERIC_CHECK',32);   // Since PHP 5.3.3
        $json = str_replace("\"", "", $json); //replace all the "" with nothing
         echo $json;

    }
    mysqli_close($con);

    ?>

我知道堆栈溢出社区总是需要更多信息,但是看在上帝的份上,我不再知道了,我真的很想学习这个。

编辑-1:

这是我所知道的,但没有结果。

<!DOCTYPE HTML>
<html>
<head>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"> </script>
<script type="text/javascript" src="canvasjs.min.js"></script>
    <script type="text/javascript">

                $(document).ready(function () {

                $.getJSON("data.php", function (result) {

                var dataPoints = [];

                for (var i = 0; i <= result.length - 1; i++) {
                dataPoints.push({ x: Number(result[i].x), y: Number(result[i].y) });
                }

                var chart = new CanvasJS.Chart("chartContainer", {
                data: [
                {
                dataPoints: dataPoints
                }
                ]
                });

                chart.render();
                });
        });


</script>

</head>
<body>
    <div id="chartContainer" style="height: 300px; width:100%;">
    </div>
</body>
</html>

EDIT-2:默认代码,其工作原理:

这是不使用我的 data.php 代码并使用随机数据点作为数据源的默认代码。它来自 Canvasjs,效果很好。

<!DOCTYPE HTML>
<html>

<head>
    <script type="text/javascript">
    window.onload = function () {

        var dps = []; // dataPoints

        var chart = new CanvasJS.Chart("chartContainer",{
            title :{
                text: "Patient #01"
            },          
            data: [{
                type: "line",
                dataPoints: dps 
            }]
        });

        var xVal = 0;
        var yVal = 100; 
        var updateInterval = 20;
        var dataLength = 500; // number of dataPoints visible at any point

        var updateChart = function (count) {
            count = count || 1;
            // count is number of times loop runs to generate random dataPoints.

            for (var j = 0; j < count; j++) {   
                yVal = yVal +  Math.round(5 + Math.random() *(-5-5));
                dps.push({
                    x: xVal,
                    y: yVal
                });
                xVal++;
            };
            if (dps.length > dataLength)
            {
                dps.shift();                
            }

            chart.render();     

        };

        // generates first set of dataPoints
        updateChart(dataLength); 

        // update chart after specified time. 
        setInterval(function(){updateChart()}, updateInterval); 

    }

</script>



<script type="text/javascript" src="canvasjs.min.js"></script>
</head>
<body>
    <div id="chartContainer" style="height: 300px; width:600px;">
    </div>
</body>
</html>
4

3 回答 3

2

看起来 jQuery 是在 canvasJS 之后加载的。如果 Canvasjs 需要使用 jQuery,则需要先加载 jQuery。尝试切换这些行,以便在顶部加载 jQuery,它可能会修复您的错误。

编辑:实际上,托管您的 jQuery 的 CDN 似乎没有使用 $ 作为您的主要 jQuery 对象的名称。如果您将 $ 更改为“jQuery”,则应该解决该错误。例如:

$(document).ready

会成为:

jQuery(document).ready

与 $.getJson 相同

于 2015-06-09T20:57:16.530 回答
0

看起来 Jquery 没有正确加载,我认为这是因为您将外部脚本直接包含在元素之后的非常规做法。尝试将它们向下移动到您自己的脚本之前的头部。

编辑:帖子已更新,显然这没有帮助。

于 2015-06-09T21:01:43.793 回答
0

解决了

首先包括这一行:

比包括这一行:在代码之下,而不是在它之上。

比转到我的 data.php 并注释(或删除)这一行: //$json = str_replace("\"", "", $json); //replace all the "" with nothing

你为什么问?好吧,因为 CanvasJS 需要字符串而不是单独的字符/整数。

这样输出将是:

[{"x":"1","y":"5"},{"x":"2","y":"5"},{"x":"3","y": "4"},{"x":"4","y":"1"},{"x":"5","y":"8"},{"x":"6", "y":"9"},{"x":"7","y":"5"},{"x":"8","y":"6"},{"x": "9","y":"4"},{"x":"10","y":"7"},{"x":"14","y":"7"},{ "x":"15","y":"7"}]

代替:

[{x:1,y:5},{x:2,y:5},{x:3,y:4},{x:4,y:1},{x:5,y:8} ,{x:6,y:9}...等。

于 2015-06-09T21:44:11.270 回答