1

我想使用 flot 和 mysql 绘制图形,但发生异常

获取数据.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>

这段代码有什么问题?接下来我想用轴之一绘制图形是时间。

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 的头部。

据我所知,您实际上并不需要 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 类型智能地将 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 script [] = array 中,您正在创建 [[]] = array 内部数组。但是当数组很大的时候,在php中回显就很麻烦了。我们做什么。数组结构与 php 中的类似。您需要将数据作为“数组内的数组”添加到 php 中,例如:php array(array(1,2,3)) = [[1,2,3]]。如何将其映射到json?

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

干杯

于 2014-02-18T05:35:16.947 回答