0

我也开始使用 JQPlot 来实时绘制图形。我有一个示例示例,它将仅使用两个数据绘制图形-

var storedData = [70, 10];

然后我添加了一个按钮,如果我单击该按钮,它将开始呈现更多数据。基本上,您可以说就像来自服务器的实时数据一样-

但我目前面临的问题是,只要我点击Start Updates按钮,它就不会画任何东西。所以我相信,我搞砸了按钮点击的东西。我在 Javascript 和 HTML 方面工作了很长时间,所以我忘记了很多东西。

下面是我的代码-

<!DOCTYPE html>

<html>
<head>

    <title>Line Charts and Options</title>

    <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
    <link rel="stylesheet" type="text/css" href="examples.min.css" />
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />

    <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
    <script class="include" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


</head>
<body>
    <div class="colmask leftmenu">
      <div class="colleft">
        <div class="col1" id="example-content">

<div id="chart1" style="height: 300px; width: 500px; position: relative;"></div>
<button>Start Updates</button>



<script class="code" type="text/javascript">
$(document).ready(function(){
  var storedData = [70, 10];
  var plot1;
  renderGraph();


$('button').click( function(){
    doUpdate();
    $(this).hide();
});

function renderGraph() {
    if (plot1) {
        plot1.destroy();
    }
    plot1 = $.jqplot('chart1', [storedData]);
}

var newData = [9, 1, 4, 6, 8, 2, 5];


function doUpdate() {
    if (newData.length) {
        var val = newData.shift();
        $.post('/echo/html/', {
            html: val
        }, function(response) {
            var newVal = new Number(response); /* update storedData array*/
            storedData.push(newVal);
            renderGraph();
            log('New Value '+ newVal+' added')
            setTimeout(doUpdate, 3000)
        })

    } else {
        log("All Done")
    }
}

function log(msg) {
$('body').append('<div>'+msg+'</div>')
}
});
</script>


    <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>

  <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
  <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>


</body>


</html>

我无法使按钮单击事件起作用。一旦我单击Start Update按钮,它就不会绘制任何东西。正确的行为应该是它应该开始在带有新数据集的图形上呈现。

我试图通过这个jsfiddle使实时渲染工作

我在我的 HTML 中从上面的 JSFiddle 复制了相同的一堆代码,但它对我不起作用。有人可以帮我吗?

4

1 回答 1

1

给你 - 你必须在脚本标签中更新到你的 jqplot 位置。此外,我不得不将 doUpdate 更改为 doUpdate2,因为据我所知,如果没有 jfiddle,$.post 将无法工作。

<!DOCTYPE html>

<html>
<head>

    <title>Line Charts and Options</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript" src="jqplot/jquery.jqplot.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.canvasTextRenderer.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.cursor.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.pointLabels.min.js"></script>
    <script type="text/javascript" src="jqplot/plugins/jqplot.highlighter.min.js"></script>
    <script type="text/javascript">



        $(function(){

                /* store empty array or array of original data to plot on page load */

                    var storedData = [70, 10];

                    /* initialize plot*/

                    var plot1;
                    renderGraph();

                    $('button').click( function(){
                    doUpdate2();
                    $(this).hide();
                    });

                    function renderGraph() {
                    if (plot1) {
                        plot1.destroy();
                    }
                    plot1 = $.jqplot('chart1', [storedData]);
                    }

                    var newData = [9, 1, 4, 6, 8, 2, 5];
                    var cp = 0;
                    function doUpdate2() {
                        var newVal = new Number(newData[cp]); /* update storedData array*/
                        storedData.push(newVal);
                        renderGraph();
                        log('New Value '+ newVal+' added')
                        if (cp < newData.length-1) setTimeout(doUpdate2, 3000)
                        cp++;
                    }

                    function doUpdate() {
                    if (newData.length) {
                        var val = newData.shift();
                        $.post('/echo/html/', {
                        html: val
                        }, function(response) {
                        var newVal = new Number(response); /* update storedData array*/
                        storedData.push(newVal);
                        renderGraph();
                        log('New Value '+ newVal+' added')
                         setTimeout(doUpdate, 3000)
                        })

                    } else {
                        log("All Done")
                    }
                    }

                    function log(msg) {
                    $('body').append('<div>'+msg+'</div>')
    }

        });



    </script>


</head>
<body>
    <div id="chart1" style="height: 300px; width: 500px; position: relative;"></div>
    <button>Start Updates</button>

</body>

</html>
于 2013-04-17T05:47:36.957 回答