1

flotとmysqlを使用してグラフをプロットしたいのですが、例外が発生します

getData.php

       $sql = mysql_query("SELECT count(Msg_ID) as msgCount,From_user
                           FROM Messages
                           GROUP BY From_user");

            echo "[";
  while($result = mysql_fetch_array($sql))
  {
     //print_r($result);
     echo "[".$result['msgCount'].",".$result['From_user']."]"."\n";

   }

    echo "]";

そしてプロットのために

<div id="plotarea"  style="width:600px;height:300px;">

                    <script type="text/javascript">

            var options = {
                    lines: { show: true },
                    points: { show: true },
                    xaxis: { min:0,max:5 },
                    yaxis: { min:1  ,max:60},
               };

    $.ajax({
                            url:"getData.php",
                            type:"post",
                            success:function(data)
                            {
                                    alert(data);
                                    $.plot($("#plotarea"),data,options);
                                    //alert(data);
                            }
                    })
                    </script>

    </div>

このコードの何が問題になっていますか?次に、軸の1つが時間であるグラフをプロットしたいと思います。

4

3 に答える 3

6
 $sql = mysql_query("SELECT count(Msg_ID) as msgCount,From_user
                           FROM Messages
                           GROUP BY From_user");

  while($result = mysql_fetch_array($sql))
  {
     $user_data[] = array($result['msgCount'],$result['From_user']);
  }

  echo json_encode($user_data);

上記により、カンマ区切りの問題が解消されます(私が知る限り、解決されたことはありません)。

次に、javascript:

  <script type="text/javascript">
    $(function () {
            var options = {
                    lines: { show: true },
                    points: { show: true },
                    xaxis: { min:0,max:5 },
                    yaxis: { min:1  ,max:60},
               };

    $.get("getData.php", function(data){
                            $.plot($("#plotarea"),data,options);
                         }, 
                json);
    });
   </script>

に変更$.ajaxしたことに注意し$.getてください。ページからスクリプトにデータを渡していないため、投稿は必要ありません。を使用する$.getと、すべての設定名が想定されます。

また、スクリプトを html から取り出して、jquerywindow.onload構文内に配置したことにも注目してください$(function () {。これは、html の head に入ります。

私が知る限り、$.ajax 関数をトリガーするイベントを定義していないため、本当に ajax は必要ありません。次のように、ページをロードする同じスクリプトにスクリプトを入れるだけでよいのに、ajax を使用してスクリプトを呼び出しているようです。

 <?php
 $sql = mysql_query("SELECT count(Msg_ID) as msgCount,From_user
                           FROM Messages
                           GROUP BY From_user");

  while($result = mysql_fetch_array($sql))
  {
     $user_data[] = array($result['msgCount'],$result['From_user']);
  }
  ?>

  <script type="text/javascript">
    $(function () {
            var options = {
                    lines: { show: true },
                    points: { show: true },
                    xaxis: { min:0,max:5 },
                    yaxis: { min:1  ,max:60},
               };

     var userposts = <?php echo json_encode($user_data); ?>;

     $.plot($("#plotarea"),userposts,options);

   </script>      
   <style type="text/css">
   #plotarea {
        width: 600px, height: 300px;
   }
   </style>
   </head>
   <body>
   .....//Put whatever before the div
   <div id="plotarea"></div>
   .....//Finish up the page.
于 2009-09-12T08:50:01.400 に答える
1

まず、PHPコードで作成しているJavaScriptリストが、各データポイントリスト項目をコンマ区切り文字で区切られていないように見えます。

jQuery $ .ajaxのドキュメントによると、success関数に渡される最初の引数は、サーバーから返されるデータであり、「dataType」パラメーターに従ってフォーマットされますdataTypeパラメータを指定していません。ドキュメントによると、応答のMIMEタイプが指定されていない場合は、応答のMIMEタイプに基づいて、responseXMLまたはresponseTextのいずれかが成功コールバックにインテリジェントに渡さdataTypeれます。

プロット関数に渡されるデータは、Flotが期待するJavaScriptリストオブジェクトではなく、単純な古い文字列だと思います。通話にdataType: 'json'オプションを追加すると、これが修正されるはずです。$.ajax

于 2009-07-07T12:08:59.293 に答える
0

出力しようとしているのは、php 側の json ドキュメントです。これは、Java スクリプト配列に直接解析されます (jquery などのライブラリによって手動または自動で)。

そのため、php で json を出力する必要はありません。代わりに、データを php 配列に簡単にフィードし、json_encode 関数を使用して簡単に json 文字列に変換できます。

小さな例は、出力しようとしていたのに役立ちます

echo "[".$result['msgCount'].",".$result['From_user']."]"."\n";

これはJavaスクリプトで[] =配列であり、配列内に[[]] =配列を作成しています。しかし、配列が大きい場合、php でエコーするのは面倒です。私たちは何をしますか。php の配列構造は似ています。データを「配列内の配列」として php に追加する必要があります (例: php array(array(1,2,3)) = [[1,2,3]])。それをjsonにマップする方法は?

easy==> echo json_encode(array(array(1,2,3));

乾杯

于 2014-02-18T05:35:16.947 に答える