2012-02-08 96 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);