2012-02-08 30 views
0

我想弄清楚是否可以從json文件配置圖表以及如何去做。jqPlot:從json定義圖表參數

讓我們以另一種風格寫下句子:我可以使用json文件傳遞jqPlot數據以繪製圖表和圖表參數嗎?

直到現在我只是用json文件來存儲數據。

有什麼建議嗎?

由於提前, 埃文

回答

0

可以,這裏是使用AJAX調用的例子:

$.ajax({ 
    url: 'input.json', 
    dataType: 'json', 
    success: function(options) 
    {         
     var data = [ 
     [3, 7, 9, 1, 4, 6, 8, 2, 5], 
     [4, 8, 10, 2, 5, 7, 9, 3, 6], 
     [5, 9, 11, 3, 6, 8, 10, 4, 7], 
     [6, 10, 12, 4, 7, 9, 11, 5, 8], 
     [7, 11, 13, 5, 8, 10, 12, 6, 9]]; 

     var plot = $.jqplot('chart', data, options);     
    }, 
    error: function(jqXHR, textStatus, errorThrown) 
    { 
    alert(textStatus) 
    } 
}); 

這裏的圖表選項是從檢索(在這種情況下)本地JSON文件,它看起來是這樣的:

{ 
"legend": {   
    "show": true, 
    "placement": "outsideGrid", 
    "location": "s", 
    "rendererOptions": { 
     "numberRows": 1 
    } 
}, 
"seriesDefaults": { 
    "showMarker": false, 
    "fill": false 
}} 

然後該地塊照常產生。一個限制(我相信):如果您想使用自定義渲染器(例如$ .jqplot.DateAxisRenderer),則無法通過JSON指定。

+0

感謝Kryptic,但有一點仍不清楚:是input.json含選擇? 在這種情況下,我應該寫: var plot = $ .jqplot('chart',data,url); ? 我在哪裏可以通過json圖表選項? – EBAH 2012-02-25 09:24:33

+0

@EBAH是的,input.json包含選項。選項是來自ajax請求的返回數據(成功函數中的變量「options」),這就是你傳遞給jqplot的東西。 – Kryptic 2012-02-28 17:20:35

0

我不知道你們其他人的情況,但我不喜歡這裏的迴應,並決心做出這項工作。我終於成功了,它可以像「$ .jqplot.DateAxisRenderer」一樣工作,沒有任何問題。

在我的情況下,我實際上是從CherryPy應用程序傳遞的東西,我需要能夠將選項作爲JSON傳遞給圖表的數據。我最終將整個選項集作爲字符串傳遞,然後使用EVAL將其更改回JavaScript代碼。一旦我找出它的語法實際上完美的作品。這是使其工作的最佳方式。

1)找出沒有使用任何JSON的所有選項,以確保情節實際正常工作。
2)逐字複製jqPlot的options參數。
3)確保在選項周圍添加圓括號,以便EVAL將正確評估它,否則您將收到語法錯誤。
4)將這整個事情變成服務器端的字符串類型對象。
5)然後這將通過JSON.dumps,因爲它與其餘數據一起返回給客戶端。
6)在客戶端javascript上只對返回的對象執行EVAL,並將結果設置爲您的選項參數。

下面是一個例子:
正如你在這裏看到的,我也在調用選項中的數據渲染器。只要這些選項在客戶端的適當上下文中被調用,它就會評估所有的變量,等等,並且完美地工作。這是工作在jQuery 1.11.0,與jqPlot 1.0.8r1250。

Server對象:

options = """({ 
     dataRenderer: ajaxDataRenderer, 
     dataRendererOptions: { 
      name: name 
     }, 
     axes:{ 
      xaxis:{ 
       label:xLabel, 
       renderer:$.jqplot.DateAxisRenderer, 
       tickOptions:{formatString:'%R'} 
      }, 
      yaxis:{ 
       tickOptions:{ 
        formatString:'%.0f' 
       } 
      } 
     }, 
     legend: { 
      show: true, 
      placement: 'outsideGrid', 
      labels: seriesLabels, 
      location: 'ne', 
      rowSpacing: '0px' 
     }, 
     highlighter: { 
      show: true, 
      sizeAdjust: 7.5 
     }, 
     cursor: { 
      show: true, 
      zoom:true 
     } 
    })""" 

返回到客戶端:

output = json.dumps({ 
        'name': name, 
        'xLabel': header[0], 
        'seriesLabels': header[1:], 
        'parms': parms, 
        'options': options, 
        'parmData': parmData, 
        'successful': True 
        }) 

的Javascript:

var options = eval(incomingData.options); 
var plot = $.jqplot('chart_'+name, "/getChartData", options);