*起因*

本来想用Chart.js来搞图表的,

但是来了个新需求,想搞的华丽点,毕竟对Chart.js来说,实现有点难度,

*做出的改变*

最终选择了FusionCharts,

*难点*

网上关于FusionCharts的一些资源也比较多,但是官网上的API没有找到,

并且一般介绍的都是饼状图,柱状图,而我想搞的是堆栈图,所以找来找去,最终找到了一个介绍堆栈图的地方↓

http://www.cnblogs.com/know/archive/2012/10/09/2716599.html

在上面的博客上下载下来demo,终于看到了我需要的堆栈图需要的xml格式的文件!!

<?xml version="1.0" encoding="utf-8" ?>
<chart palette="2" caption="Product Comparison" shownames="1" showvalues="0" numberPrefix="$" showSum="1" decimals="0" useRoundEdges="1" >
<categories>
<category label="Product A" />
<category label="Product B" />
<category label="Product C" />
<category label="Product D" />
<category label="Product E" />
</categories>
<dataset seriesName="2004" color="AFD8F8" showValues="0">
<set value="25601.34" />
<set value="20148.82" />
<set value="17372.76" />
<set value="35407.15" />
<set value="38105.68" />
</dataset>
<dataset seriesName="2005" color="F6BD0F" showValues="0">
<set value="57401.85" />
<set value="41941.19" />
<set value="45263.37" />
<set value="117320.16" />
<set value="114845.27" />
</dataset>
<dataset seriesName="2006" color="8BBA00" showValues="0">
<set value="45000.65" />
<set value="44835.76" />
<set value="18722.18" />
<set value="77557.31" />
<set value="92633.68" />
</dataset>
</chart>

改了下下载下来demo中的函数:

/*画图通用函数*/
/****画图(以指定 xml格式文件为数据源)
*xmlType =>xml文件的格式[xml字符串||xml文件]
*divId =>页面div的ID
*flashFileName =>Flash的名称,在FusionCharts文件夹下的.swf文件
*width =>Flash画布的宽度
*height =>Flash画布的高度
*xmlUrl =>根据xml文件的格式[xml字符串||xml文件],来确定传入文件路径还是xml字符串
*/
function DrawChart(xmlType, divId, flashFileName, width, height, data) {
var myChartId = new Date().getTime();
var myChart = new FusionCharts("../js/FusionCharts/" + flashFileName, myChartId, width, height);
if (xmlType == "file") {//判断xml的类型
myChart.setDataURL(data); //获取xml文件的数据源
}
else if (xmlType == "str") {
myChart.setDataXML(data); //获取xml格式数据源
} else {
console.log("main.js 中的DrawChart函数中的xmlType不在选择范围内");
}
myChart.render(divId);
}

HTML中:

<div id="id_source"></div>
<div id="id_chart_business"></div>

JS调用:

  /*xml文件调用*/    
  DrawChart("file", "id_source", "StackedColumn2D.swf", "650", "450", "../js/FusionCharts/TestData/StackedBar.xml"); /*xml字符串调用*/
  //这里的问题比较多,chart中一个标签写不对,貌似就不能显示出图表!!!有几个标签我都是一个个去试验是否能存在,存在的效果...
  //还有拼接字符串的时候,我本来是用var data_business = '<chart shownames="1"><set value="99" label="项目0" color="0000FF"/>',
  //即,整个xml串用单引号包起来,标签值用双引号还是报错,看了下生成的源码,原因是标签值的双引号,在生成的源码中会截断html中其它标签的代码,毕竟html代码一般都是双引号的(自己查看下生成的代码就可以看出来了),
var data_business = "<chart shownames='1' showvalues='1' showSum='1' decimals='0' useRoundEdges='1' caption='业务' numberPrefix='' showBorder='0' borderThickness='0' borderColor='#EEEEEE' bgColor='#EEEEEE' >";
data_business += "<set value='99' label='项目0' color='0000FF'/><set value='59' label='项目1' color='0000FF'/><set value='80' label='项目2' color='0000FF'/>";
data_business += "<set value='150' label='项目3' color='0000FF'/><set value='40' label='项目4' color='0000FF'/><set value='60' label='项目5' color='0000FF'/>";
data_business += "</chart>";
//data_business = "<chart caption='8888' numberPrefix='$'><set value='25' label='Item A' color='AFD8F8' /><set value='25' label='Item A' color='AFD8F8' /><set value='25' label='Item A' color='AFD8F8' /><set value='25' label='Item A' color='AFD8F8' /><set value='25' label='Item A' color='AFD8F8' /></chart>";
DrawChart("str", "id_chart_business", "Column2D.swf", "650", "450", data_business);

*刷新*

本来读取的一个xml文件,但是发现一个情况:更改了xml的数据,但是刷新页面,页面中的图中的数据并没有实时刷新,缓存?Ctrl + F5还是不行,

最后搜了一下,解决方案也很简单,和Ajax处理缓存的方式一样,直接更改函数了(注意标红的js代码):

/*画图通用函数*/
/****画图(以指定 xml格式文件为数据源)
*xmlType =>xml文件的格式[xml字符串||xml文件]
*divId =>页面div的ID
*flashFileName =>Flash的名称,在FusionCharts文件夹下的.swf文件
*width =>Flash画布的宽度
*height =>Flash画布的高度
*xmlUrl =>根据xml文件的格式[xml字符串||xml文件],来确定传入文件路径还是xml字符串
*/
function DrawChart(xmlType, divId, flashFileName, width, height, data) {
var myChartId = new Date().getTime();
var myChart = new FusionCharts("../js/FusionCharts/" + flashFileName, myChartId, width, height);
if (xmlType == "file") {//判断xml的类型
myChart.setDataURL(data + "?t=" + new Date().getTime()); //获取xml文件的数据源,标红的用于数据的刷新
}
else if (xmlType == "str") {
myChart.setDataXML(data + "?t=" + new Date().getTime()); //获取xml格式数据源,标红的用于数据的刷新
} else {
console.log("main.js 中的DrawChart函数中的xmlType不在选择范围内");
}
myChart.render(divId);
}

 *XML文件和xml字符串的不同*

本来xml文件中的内容为:(即用setDataURL来读取数据)

<?xml version="1.0" encoding="utf-8" ?>
<chart palette="2" showBorder="0" borderThickness="0" borderColor="#EEEEEE" bgColor="#EEEEEE" bgAlpha="100%" caption="业务" shownames="1" showvalues="0" numberPrefix="" showSum="1" decimals="0" useRoundEdges="1" >
<categories>
<category label="测试数据" />
</categories>
<dataset seriesName="好评" color="FF0000" showValues="0">
<set value="3000" />
</dataset>
<dataset seriesName="中评" color="FFFF00" showValues="0">
<set value="999" /> </dataset>
<dataset seriesName="差评" color="000000" showValues="0">
<set value="150" />
</dataset>
</chart>

注意标黄的标签:bgAlpha

在我将这些文本复制为xml字符串的时候(去掉头部xml的版本和编码信息)↓(即用setDataXML来读取数据)

<chart palette='2' showBorder='0' borderThickness='0' borderColor='#EEEEEE' bgColor='#EEEEEE' bgAlpha='100%' caption='业务' shownames='1' showvalues='0' numberPrefix='' showSum='1' decimals='0' useRoundEdges='1' >
<categories>
<category label='测试数据' />
</categories>
<dataset seriesName='好评' color='FF0000' showValues='0'>
<set value='3000' />
</dataset>
<dataset seriesName='中评' color='FFFF00' showValues='0'>
<set value='999' />
</dataset><dataset seriesName='差评' color='000000' showValues='0'><set value='150' /></dataset></chart>

成的图表提示错误:‘Invalid XMLdata.’

排查 了下其它问题,最终得出结论可能是标签错误,通过排查bgAlpha在xml文件中可以有,但是setDataXML的时候不可以存在的;

*图形上添加事件,比如点击事件、事件的传参问题*

<set value='' link='JavaScript:yourFunctionName();' />

如果想传参数的话,如果类型是Number,可以的,

但是如果想传String类型的话,比较恶心了,设计单引号的问题;

我目前的解决方案是将String建为枚举类型;

写在最后↓

→FusionCharts文档不太全,各种坑,能换个别的画图形的库还是换个别的库吧,比如:ECharts

FusionCharts-堆栈图、xml格式、刷新数据、添加事件link、传参的更多相关文章

  1. C#操作数据表中XML格式的数据

    以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...

  2. xml格式的数据转化成数组

    将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...

  3. 如何在JSP页面里面显示xml格式的数据

    正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...

  4. scrapy 解析xml格式的数据

    XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...

  5. dynamic解析Http xml格式响应数据

    继续上一篇 构建RESTful风格的WCF服务 ,咱已经把服务端的数据和服务准备好了,客户端调用 wcf rest接口后如何解析xml?下面使用dynamic关键字解析来至于WCF REST XML响 ...

  6. Asp.net Core WebApi 支持json/xml格式的数据返回

    Asp.net core 在做webapi项目的时候,默认是只返回json格式的数据的,如果想要开启xml数据返回,需要在startup里配置如下: public void ConfigureServ ...

  7. SpringMVC处理XML格式的数据

    1.搭建SpringMVC+spring环境 2.web.xml,Springmvc-config.xml.springMVC提供了处理xml格式请求响应的HttpMessageConverter,s ...

  8. 关于java后台如何接收xml格式的数据

    业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户. 请求格式: <request> <head> <sign></sig ...

  9. JAVA 读取xml格式的数据

    <?xml version="1.0" encoding="UTF-8"?> <column-enums> <type name= ...

随机推荐

  1. java基础算法之选择排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. ...

  2. STL 堆

    洛谷P3378 [模板]堆 #include <iostream> #include <cstdio> #include <algorithm> #include ...

  3. 使用scrollpagination实现页面底端自动加载无需翻页功能

    当阅读到页面最底端的时候,会自动显示一个"加载中"的功能,并自动从服务器端无刷新的将内容下载到本地浏览器显示. 这样的自动加载功能是如何实现的?jQuery的插件 ScrollPa ...

  4. iOS证书问题

    链接: 关于IOS免证书真机安装的过程和问题 苹果IOS开发者账号的区别,企业账号,个人账号,公司团队账号,教育账号 苹果IOS开发者账号总结--发布应用APP时team name是否可以随意写? P ...

  5. linux swap 分区那点事儿

    前言 前段时间在用程序对较大数据进行处理时,发现自己电脑原有内存不够用而经常行卡死,于是想到了利用swap分区来扩容内存的方式.现在做一个简要的总结: swap分区的概念 初试swap分区是在进入实验 ...

  6. WPF Popup 控件导致被遮挡内容不刷新的原因

    WPF Popup 控件导致被遮挡内容不刷新的原因 周银辉 今天在写一个WPF控件时用到了Popup控件,很郁闷的情况是:当popup关闭时,原来被popup挡住的界面部分不刷新,非要手动刷新一下(比 ...

  7. CSS强制性换行

    一般情况下,元素拥有默认的white-space:normal(自动换行,PS:不 换行是white-space:nowrap),当录入的文字超过定义的宽度后会自动换行,但当录入的数据是一堆没有空格的 ...

  8. 缩小窗口时CSS背景图出现右侧空白BUG的解决方法

    页面容器(#wrap)与页面头部(#header )为100%宽度.而内容的容器(#page)为固定宽度960px.浏览窗口缩小而小于内容层宽度时会产生宽度理解上的差异.如下图所示窗口宽度大于内容层宽 ...

  9. 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return fal的区别

    今天来看看前端的冒泡和事件默认事件如何处理 1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时 ...

  10. web 前端常用组件【06】Upload 控件

    因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ...