Google Charts - 在javascript中将数据作为变量传递

Posted

技术标签:

【中文标题】Google Charts - 在javascript中将数据作为变量传递【英文标题】:Google Charts - passing data as variable in javascript 【发布时间】:2020-08-14 17:43:46 【问题描述】:

我正在使用谷歌图表在健康应用程序中创建报告。由于应用程序的工作方式,我必须在 XSL 文档中为图表定义数据,然后使用 javascript 来获取和使用该数据。我无法在 XSL 中运行 javascript 内联 - 应用程序阻止了它。

XSL 工作正常,并为我提供以下信息:-

<div id="mydata" style="display:none;">
        [c:[v: new Date(2020,3,21), v:94.05],
         c:[v: new Date(2020,3,29), v:94.3],
         c:[v: new Date(2020,4,5), v:95],]
</div>

我的 javascript 然后看起来像这样:-

  google.charts.load('current', 'packages':['corechart']);
  google.charts.setOnLoadCallback(drawChart);
  var mydata=$("#mydata").text()
  var mydata=mydata.replace(",]", "]");
  var myconfig="cols: [id: 'Date', label: 'Date', type: 'date',id: 'Weight', label: 'Weight', type:'number'],rows: " + mydata + ""


function drawChart() 
    var data = new google.visualization.DataTable(myconfig);



    var options = 
      title: 'Patient Weight',
      curveType: 'function',
      legend:  position: 'bottom' 
    ;

    var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));

    chart.draw(data, options);
  

问题是它不起作用。我明白了:

Uncaught (in promise) SyntaxError: Unexpected token c in JSON at position 0
    at JSON.parse (<anonymous>)
    at gvjs_Li (jsapi_compiled_default_module.js:55)
    at new gvjs_L (jsapi_compiled_default_module.js:161)
    at drawChart (<anonymous>:8:20)

如果我从 myconfig 中复制值并将其粘贴到 google 可视化中,它可以完美运行。这是生成的 myconfig 变量:-

 cols: [id: 'Date', label: 'Date', type: 'date',id: 'Weight', label: 'Weight', type:'number'],rows: 
        [c:[v: new Date(2020,3,21), v:94.05],c:[v: new Date(2020,3,29), v:94.3],c:[v: new Date(2020,4,5), v:95]]

这快把我逼疯了。请帮忙!

更新:

终于破解了!!

我也将 cols 定义放入 DIV 中,并在所有内容周围加上引号,按照建议删除了“新”,最后它起作用了!!

【问题讨论】:

我认为您在 div 中定义的数据末尾附近有一个额外的逗号。 这是真的,但 .replace JS 中的删除它。抱歉 - 我粘贴了错误的 javascript(脚本现已更正) 【参考方案1】:

我有时会使用这种方法,这就是我发现的。

硬编码数据的原因, 您正在将一个对象传递给数据表。

但是当数据来自 XSL 时,它是一个字符串。

首先,所有对象键都必须用引号括起来。 其次,您不能在日期上使用new 运算符。 你必须使用谷歌的date string representation

尝试从 XSL 中按如下方式格式化数据...

["c":["v": "Date(2020,3,21)", "v":94.05],
     "c":["v": "Date(2020,3,29)", "v":94.3],
     "c":["v": "Date(2020,4,5)", "v":95]]

注意:关于逗号,以下是我用来防止最后一个逗号的xsl...

<xsl:if test="position() != last()">,</xsl:if>

【讨论】:

希望这会有所帮助——评论中提到的最后一个逗号可能是个问题,如果它仍然不起作用,请将其删除...

以上是关于Google Charts - 在javascript中将数据作为变量传递的主要内容,如果未能解决你的问题,请参考以下文章

图表在ng2-google-charts中调整大小

Google Charts interpolateNulls无效

如何在 Google Charts 动画中阻止图例消失?

Google Charts Sankey - 节点文本样式

markdown Google Charts实验

Google Charts列着色?