2009-10-20 49 views
7

我發現了用於繪製漂亮圖表的jquery的flot。但是我無法解析我想從MYSQL表示的數據。它的駕駛我瘋了,因爲我得到這個錯誤:圖表從MYSQL到jquery FLOT

uncaught exception: Invalid dimensions for plot, width = 0, height = 0 

有什麼辦法把MYSQL數據轉換成從該海軍報除了?:

PHP的一部分:

<?php 
include './includes/config.php'; 
include './includes/opendb.php'; 

$ID=$_GET["ID"]; 
$data=$_GET["data"]; 

$query_set = "SET @cnt = -1"; 
$query = "SELECT @cnt +1, {$data} FROM table_inf where ID = {$ID};"; 

$result = mysql_query("{$query_set}"); 
if (!$result) { 
die("Query to show fields from table failed"); 
} 

$result = mysql_query("{$query_select}"); 
if (!$result) { 
die("Query to show fields from table failed"); 
} 

$arr = array(); 
while($obj = mysql_fetch_object($result)) 
{ 
    $arr[] = $obj; 
} 

//NOW OUTPUT THE DATA: 
print json_encode($arr); 

mysql_free_result($result); 
include './includes/closedb.php'; 
?> 

JavaScript部分:

<script type="text/javascript"> 

function get_data() { 

var options = { 
lines: {show: true}, 
points: {show: true}, 
yaxis: { min: 0 }, 
}; 

$.ajax({ url: "return_values.php?ID=1&data=MAG", 
dataType: "json", 
success: function(result) 
{ 
plot = $.plot($("#placeholder"), result, options); 
} 
}); 
}; 
</script> 

我一直googling ..沒有成功。看起來很簡單,但情節根本不會理解數據...什麼...

php文件的輸出(用於兩個項目爲例)如下:

[{"@cnt := @cnt + 1":"0","MAG":"6.87"},{"@cnt := @cnt + 1":"1","MAG":"11.44"}] 

哪裏@ cnt是每行(0,1,2,3 ...)x軸遞增的計數器,MAG是y軸上顯示的數據本身。

我使用的jQuery是:

<script src="./javascripting/jquery-1.3.2.js" type="text/javascript"></script> 
<script src="./javascripting/jquery.tabs.pack.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" src="./javascripting/jquery.flot.js"></script> 

其中海軍報是0.5版本和瀏覽器Firefox瀏覽器。

+0

您可能想要發佈一些PHP腳本的輸出,以便人們可以看到JSON編碼數據的外觀。 – 2009-10-20 17:33:56

+0

是的,你是對的,只是編輯它。謝謝 – 2009-10-20 17:54:39

+0

你可能想要添加你正在使用的jQuery插件。可以是flot插件,但不能單獨從您的代碼中分辨出來。 – googletorp 2009-10-20 17:55:38

回答

9

讓我猜測:你正在隱藏的標籤中呈現。我還沒有找到它的修復,但它看起來像隱藏div(例如,display:none)因爲無法確定佔位符div的尺寸而中斷。在默認顯示的選項卡中進行渲染。

我正在解決同樣的問題。我想在第二個選項卡上顯示我的圖形,第一個選項卡上顯示一些其他數據。這裏是我的解決方案:

<script type="text/javascript"> 
    $(function() { 
     $("#tabs").tabs(); 
     $("#tabs").bind('tabsshow', function(event, ui) { 
      if (ui.index == 1) { // second tab 
       show_graph(); 
      } 
     }); 
    }); 

然後實際調用.plot()就是把show_graph()函數中。

1

只是檢查......你確實包括了佔位符div,對嗎?

<div id="placeholder" style="width:600px;height:300px;"></div> 
+0

是啊我使用的div是:

2009-10-20 20:14:13

0

你需要閱讀的海軍報文檔的詳細,是海軍報預計該系列數據是在特定的格式。至少,你應該有

[{label: 'Item 1', data: [1,2]},{label: 'Item 2', data: [2,4]}] 

這裏是API:Flot API,第一項說數據格式,只是改變輸出以滿足這些標準,你應該罰款。

-1

是的,我已被處理的文檔:

「A系列可以是原始數據或與屬性的對象的原始 數據格式是點的數組:

[[X1, Y1],[X2,Y2],...] 「

而在這個例子:

<script id="source" language="javascript" type="text/javascript"> 
$(function() { 

    var d1 = []; 
    for (var i = 0; i < 14; i += 0.5) 
    d1.push([i, Math.sin(i)]); 

    var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; 

    var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]]; 

    $.plot($("#placeholder"), [ d1, d2, d3 ]); 
}); 
</script> 

沒有必要使用的標籤:」 標籤用於爲l egend,如果你沒有指定,系列將不會顯示在圖例中。「

無論如何,JSON編碼數據包括MYSQL聲明的字段的名稱,因此它應該像一個標籤...

[{"@cnt := @cnt + 1":"0","MAG":"6.87"},{"@cnt := @cnt + 1":"1","MAG":"11.44"}] 
-3

改變你的佔位符div的名字不是「佔位符以外的東西「?

3

我遇到了同樣的問題。感謝edebill的解決方案。也許,這是新的,但jQuery UI的標籤文檔的網站,現在提到了這個問題,必須通過改變CSS位置非常簡單的解決方案: http://docs.jquery.com/UI/Tabs

而不是隱藏你只需動面板關閉屏幕:

.ui-tabs .ui-tabs-hide { 
    position: absolute; 
    left: -10000px; 
} 
+0

不錯,謝謝!你可能想包括,如果你不是直接編輯jQuery css你應該也添加顯示:inline!important;或者它不會工作 – Cory 2011-02-07 20:47:34