0

私はこれを解決しようとしてきましたが、うまくいきませんでした。次のphpコードは、ミリ秒間隔で保存されているデータをmysqlから取得し、jqplotがグラフを描画するためにクライアント側に送信します。

    <?php
    $unit = $_GET["units"];

    $sq="SELECT su_id FROM Station_stat
    WHERE su_id in ($unit) GROUP BY su_id";

    $res = mysql_query($sq);
    $first=true;
    echo "Label=";
    echo "[";
    while($row = mysql_fetch_array($res)){
        if ($first != true)
          echo ",";
          echo "{label:\"SUID ".$row['su_id']."\"}";
        $first = false;
      }
    echo "];";


    $sql="SELECT su_id FROM Station_stat
    WHERE su_id in ($unit) GROUP BY su_id";

    $result = mysql_query($sql);
    $first=true;
    echo "s1=";
    echo "[";
    while($row = mysql_fetch_array($result)){
    $suid = explode(",", $row['su_id']);

    if ($first != true)
    echo ",";
    $first = false;

    $count=count($suid);
    $i=0;
    while($i<$count)
      {
      getsuId($suid[$i]);
      ++$i;
      }
    }
    echo "];";

    function getsuId($suid){

    $start = $_GET["start"];
    $stop = $_GET["stop"];

    $qt=mysql_query("select TIMESTAMP(d_time), bs_rssi from Station_stat WHERE su_id ='".$suid."' and d_time BETWEEN '".$start."' and '".$stop."' GROUP BY d_time");

    $first=true;
    echo "[";
    while($row = mysql_fetch_array($qt)){
        if ($first != true)
          echo ",";
          echo "[\"".$row['TIMESTAMP(d_time)']."\",".$row['bs_rssi']."]";
          $first = false;
      }
    echo "]";
    }

    mysql_close();
    ?>

以下は、ボタンをクリックするだけでphpスクリプトとの間でデータを送受信する関数です。

    function display() {
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    eval(xmlhttp.responseText);
    drawPlot();
      }
    }
    var units = document.getElementById('suid').value;
    var stat = document.getElementById('start').value;
    var stop = document.getElementById('stop').value;
    var query = "?units=" + units ;
      query +=  "&start=" + start ;
      query +=  "&stop=" + stop;
    xmlhttp.open("GET","../chart.php" + query , true);
    xmlhttp.send();
    }

    function drawPlot() {
    var start = $("#start").val();
    plot1 = $.jqplot("chart1", s1, {
    //title: "Aera Chart",
    series: Label, 
    axes: { 
        xaxis: { 
             renderer:$.jqplot.DateAxisRenderer, 
             min: start,
             tickInterval: '2 minute',
             tickRenderer: $.jqplot.CanvasAxisTickRenderer,
             tickOptions: {
                    formatString: '%Y-%m-%d %H:%M:%S',
                    angle: -55
                    }
             },
        yaxis: {
             label: "[RSSI] ",
             tickOptions:{formatString:'%d '}
        }

        }, 
     cursor:{
              show: true, 
              zoom: true
     },
     legend: { show: true }
     });
     plot1.redraw();
     }

私が今それに関して持っている問題は次のとおりです:

(1)グラフのレンダリングには時間がかかります(20〜30秒など)。

(2)ドラッグしてズームすると、ページが応答しなくなります。

よろしくお願いします。ありがとうございました。

4

1 に答える 1

0

このプロジェクトを数日休んだ後、私はついにそこに貼り付けられたAjax関数コードに間違いがあることに気づきました。サーバーサイドに送信するパラメーターの1つを「stat」として宣言しましたが、他のパラメーターに追加するときに「start」を追加しました。

    var stat = document.getElementById('start').value;
    query +=  "&start=" + start ;

その行を編集した後、jqplotがグラフの読み込みに速く応答するのを見ることができました。ありがとうございました。

于 2012-10-18T15:58:12.957 に答える