【问题标题】:How to transfer Javascript code correctly?如何正确传输 Javascript 代码?
【发布时间】:2015-06-20 18:52:23
【问题描述】:

我有两个代码,都生成折线图。但是,第一个不使用 mysql 数据源,它使用随机数学生成的数据点。但它使用刷新间隔,因此是实时的。

第二个代码实际上使用了 mysql 数据源,并在折线图中显示了我的数据库中的数据。但是它不是live,因为它没有refresh-interval功能。

我试图将第一个代码的刷新间隔/图表更新代码部分转移到我的第二个代码,该代码不是实时的,而是使用真实的数据源。

这是我的实时代码,带有随机数据点:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js">` 
    <script type="text/javascript">
        window.onload = function () {

            var dps = []; // dataPoints

            var chart = new CanvasJS.Chart("chartContainer2",{
                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="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js">` 
</script>
    <script type="text/javascript">

                    $().ready(function () {

                    $.getJSON("arduino_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",{
                title :{
                    text: "Patient #01"
                },          
                data: [{
                    type: "line",
                    dataPoints: dataPoints 
                }]
            });

                    chart.render();
                    });

            });
    </script>
    <script type="text/javascript" src="canvasjs.min.js"></script>

这是我迄今为止尝试过的:

<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">

                $().ready(function () {

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

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

                var dataPoints = [];
                var updateInterval = 20;
                var dataLength = 500; // number of dataPoints visible at any point

                var updateChart = function (count) {
                          count = count || 1;

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

               }
                if (dataPoints.length > dataLength)
                {
                dataPoints.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:100%;">
    </div>
</body>
</html>

但它一直在说

第 42 行的意外标记 ')'

            chart.render();     

    )};

我很尴尬,但由于所有的手镯/括号,我找不到解决方案。我已经尝试了一切。有 ) 和没有 } 但似乎没有任何效果。

如果解决了,代码的时间位置可以吗?

编辑:第一个问题已解决,新问题:JS 定位

<!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">

                $().ready(function () {

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

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

                var dataPoints = [];
                var updateInterval = 20;
                var dataLength = 500; // number of dataPoints visible at any point

                var updateChart = function (count) {
                          count = count || 1;

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

               }
                if (dataPoints.length > dataLength)
                {
                dataPoints.shift();             
                }

                chart.render();     

                });

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

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


       });




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

输出:

找不到变量:updateChart

【问题讨论】:

  • 你说找不到第42行?如果您正确缩进您的 JS,即使在记事本中也很容易找到这些错误。
  • 对不起,我应该更清楚,第 42 行在:chart.render(); )};无论我在那里改变什么,它都行不通
  • chart.render(); )}; 最后应该是 }); 并且在 setInterval(); 之后应该有相同的 });
  • 感谢它的工作。但现在它说(我因为定位而害怕):ReferenceError:找不到变量:updateChart

标签: javascript jquery html json canvasjs


【解决方案1】:

您使用了)}; 而不是});

在你的 JS 末尾你也只使用了} 而不是});

也像这样称呼你的图表

setInterval(updateChart, updateInterval); 

并确保您的 updateInterval 在正确的函数范围内。
以下是它的大致样子:

jQuery(function ($) {

    function updateChart( result ) { // move it here!!!
        $.getJSON("arduino_data.php", function( result ){
            var dataPoints = [];
            var dataLength = 500; // number of dataPoints visible at any point
            var updateInterval = 1000;
            var chart = new CanvasJS.Chart("chartContainer",{ // new chart Object
                title :{
                    text: "Patient #01"
                },          
                data: [{
                    type: "line",
                    dataPoints: dataPoints 
                }]
            });
            for (var i = 0; i <= result.length - 1; i++) {
                dataPoints.push({ x: Number(result[i].x), y: Number(result[i].y) });
            }
            if (dataPoints.length > dataLength){
                dataPoints.shift();             
            }        
            chart.render();   
        }); 
    }


    // First read - Start
    updateChart(); 
    // Update chart after specified time. 
    setInterval(updateChart, updateInterval); 

});

【讨论】:

  • 谢谢,它成功了。我看它太久了,无法监督。它现在说:谢谢它有效。但现在它说(由于定位我害怕):ReferenceError:找不到变量:updateChart 这实际上是我的主要问题,因为我是javascript新手。我注意到定位对于 JS 来说相当重要
  • @MieerDarwesh 哦,是的,因为您需要在 getJson 范围之外创建函数
  • @MieerDarwesh 只是一个问题......间隔实际上应该做什么?每次对 arduino 数据执行一次 Ping?
  • 看到count 参数了吗?您始终将其设置为 1,但您从不使用该计数参数变量
  • @MieerDarwesh 我相信您可以将图表对象实例保留在该函数之外,但同样......我无法测试。
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多