最近要将后台数据库上的一些数据以可视化的方法显示到前端,找来找去,发现百度开发的这套图表工具库还不错,网上搜索了一下相关的教程,也算是实现了较为简单的demo。于是写下来,记录一下。


ECharts

ECharts是国人开发的一套前端的图表工具库,使用起来超方便,也很简单(当然了,前提是理解了其工作原理之后)。

下面简单的介绍一下,如何在项目中使用ECharts。

下载js代码

下载地址: http://echarts.baidu.com/

个人觉得,开发人员下载完整版会比较好一点。而且官方建议的也是下载完整版。

博主这里下载的是完整版,大约不到2M。

工作原理浅析

其实仔细的想想,ECharts的工作就是在网页上显示了一张特殊的图片嘛。所以我们需要意识到,需要给“图片”一个一个空间,这样才会有图表的安家之所嘛。

然后空间有了,也就是有地皮了。要盖一个房子的话,必须得有框架不是。这样的往上面添加些砖瓦水泥什么的才能将房子盖起来。同样的,ECharts也是这么个原理。但是这个“骨架”叫Option。至于这个option需要怎么设置,官网上有详细的介绍,博主就不再这里重复的造轮子了。大家有兴趣的可以到下图展示的地方去学习。

在项目中引入ECharts

如题,本小节就是大致的讲一下如何简单的使用这个图标库。

不妨看一下下面的代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>入门</title>
  6. <script src="../static/js/echarts.js"></script>
  7. <script src="../static/js/sleeplib.js"></script>
  8. </head>
  9. <body>
  10. <h1>开始测试</h1>
  11. <hr>
  12. <!-- 先准备一个用于盛放图表的容器 -->
  13. <div id='container' style="width: 600px; height: 400px;"></div>
  14. <script>
  15. //通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图
  16. //基于准备好的DOM,实例化echarts实例
  17. var myChart = echarts.init(document.getElementById("container"));
  18. // 指定图表的配置项和数据
  19. var option1 = {
  20. title : {
  21. text : 'ECharts 入门案例'
  22. },
  23. tooltip : {
  24. text : '鼠标放上去之后的悬浮提示语句!'
  25. },
  26. legend : {
  27. data : [ '销量' ]
  28. },
  29. xAxis : {
  30. data : [ '衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子', '内裤' ]
  31. },
  32. yAxis : {},
  33. series : [ {
  34. name : '销量',
  35. type : 'bar',
  36. data : [ 7, 20, 36, 10, 10, 20, 28 ]
  37. } ]
  38. };
  39. // 使用上面的配置项作为参数,传给echart来显示
  40. myChart.setOption(option1);
  41. </script>
  42. </body>
  43. </html>

关键在于最后一句:

myChart.setOption(option1);

起作用不言而喻了吧。那么,得到的效果是什么呢? 如下图:

另外手动的点击上面的那个legend为“销量”的小红色的矩形,会有惊喜的哟。


接下来开始进入今天的正题


后台处理

后台处理包括使用PHP查询数据库,然后以数组的形式返回,再由JQuery以Ajax的形式获取数据,交给前端进行显示的过程。

数据库端MySQL

数据是核心,所以建库很重要。这里仅仅是为了演示,所以数据库建的很简单,如下图:

PHP端

需要注意的是,数据库端返回的时候必须是JSON类型,这样才可以被ajax处理的更方便。

  1. <?php
  2. header("Content-type=text/json;charset=UTF-8");
  3. $conn = mysql_connect("localhost", "root", "mysql") or die("连接数据库的过程失败!");
  4. mysql_query("set names utf-8");
  5. mysql_select_db("test");
  6. $resultset = mysql_query("select name, age from echartsuser", $conn);
  7. ////////////////////////////////////////////////准备数据进行装填
  8. $data = array();
  9. ////////////////////////////////////////////////实体类
  10. class User{
  11. public $username;
  12. public $age;
  13. }
  14. ////////////////////////////////////////////////处理
  15. while($row = mysql_fetch_array($resultset, MYSQL_ASSOC)) {
  16. $user = new User();
  17. $user->username = $row['name'];
  18. $user->age = $row['age'];
  19. $data[] = $user;
  20. }
  21. $conn.close();
  22. // 返回JSON类型的数据
  23. echo json_encode($data);

那么验证返回的数据类型到底是不是JSON,我们只需要做下接口测试即可。博主使用的是Chrome浏览器,装了一个JSON的插件,所以可以很方便的检测。如下图:

JQuery & Ajax处理

JQuery真的是难的的一个函数工具库,因此使用JQuery处理起来ajax请求会降低代码编写的复杂度,其底层将自动的处理兼容性问题。这很GEEK。

本例,目的很明确,获取刚才的数据接口内的数据。所以代码很简单,如下:

  1. // 初始化两个数组,盛装从数据库中获取到的数据
  2. var names = [], ages = [];
  3. //调用ajax来实现异步的加载数据
  4. function getusers() {
  5. $.ajax({
  6. type: "post",
  7. async: false,
  8. url: "../app/getuser.php",
  9. data: {},
  10. dataType: "json",
  11. success: function(result){
  12. if(result){
  13. for(var i = 0 ; i < result.length; i++){
  14. names.push(result[i].username);
  15. ages.push(result[i].age);
  16. }
  17. }
  18. },
  19. error: function(errmsg) {
  20. alert("Ajax获取服务器数据出错了!"+ errmsg);
  21. }
  22. });
  23. return names, ages;
  24. }
  25. // 执行异步请求
  26. getusers();

ECharts 端处理

现在“万事俱备,只欠东风”了,数据都已经有了,剩下的就是如何显示它们了。按照一开始博主的盖房子理论,下面就把骨架搭起来吧。

  1. // 初始化 图表对象
  2. var mychart = echarts.init(document.getElementById("container"));
  3. // 进行相关项的设置,也就是所谓的搭搭骨架,方便待会的ajax异步的数据填充
  4. var option = {
  5. title : {
  6. text : '姓名年龄分布图'
  7. },
  8. tooltip : {
  9. show : true
  10. },
  11. legend : {
  12. data : [ 'age' ]
  13. },
  14. xAxis : [ {
  15. data : names
  16. } ],
  17. yAxis : [ {
  18. type : 'value'
  19. } ],
  20. series : [ {
  21. "name" : "age",
  22. "type" : "bar",
  23. "data" : ages
  24. } ]
  25. };
  26. // 将配置项赋给chart对象,来显示相关的数据
  27. mychart.setOption(option);

注意xAxis: 里面的names,和series里面的ages就是之前JQuery使用ajax方式获取到的数据啦。

前端全部代码

个人觉得有个完整的代码会给人不少的启发,那么这里还是贴出前端交互的代码吧,也方便大家查看。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>JQuery Ajax Test</title>
  6. <script src="../static/js/echarts.js"></script>
  7. <script src="../static/js/jquery-1.11.1.min.js"></script>
  8. </head>
  9. <body>
  10. <h1>PHP Ajax ECahrts 测试</h1>
  11. <hr>
  12. <div id="container" style="width: 600px; height: 400px;"></div>
  13. <script>
  14. // 初始化两个数组,盛装从数据库中获取到的数据
  15. var names = [], ages = [];
  16. //调用ajax来实现异步的加载数据
  17. function getusers() {
  18. $.ajax({
  19. type: "post",
  20. async: false,
  21. url: "../app/getuser.php",
  22. data: {},
  23. dataType: "json",
  24. success: function(result){
  25. if(result){
  26. for(var i = 0 ; i < result.length; i++){
  27. names.push(result[i].name);
  28. ages.push(result[i].age);
  29. }
  30. }
  31. },
  32. error: function(errmsg) {
  33. alert("Ajax获取服务器数据出错了!"+ errmsg);
  34. }
  35. });
  36. return names, ages;
  37. }
  38. // 执行异步请求
  39. getusers();
  40. // 初始化 图表对象
  41. var mychart = echarts.init(document.getElementById("container"));
  42. // 进行相关项的设置,也就是所谓的搭搭骨架,方便待会的ajax异步的数据填充
  43. var option = {
  44. title : {
  45. text : '姓名年龄分布图'
  46. },
  47. tooltip : {
  48. show : true
  49. },
  50. legend : {
  51. data : [ 'age' ]
  52. },
  53. xAxis : [ {
  54. data : names
  55. } ],
  56. yAxis : [ {
  57. type : 'value'
  58. } ],
  59. series : [ {
  60. "name" : "age",
  61. "type" : "bar",
  62. "data" : ages
  63. } ]
  64. };
  65. // 将配置项赋给chart对象,来显示相关的数据
  66. mychart.setOption(option);
  67. </script>
  68. <marquee>确认可以到达这里啊</marquee>
  69. </body>
  70. </html>

演示结果

至此,编码任务就算完成了。那么迫不及待的来看看效果吧。

那么,稍微的修改一下数据,再来看看结果会怎样,刷新之后如下图:

总结

最后来回顾一下,本次试验的收获。其实也就是对于ECharts的一个比较“全栈”(请允许我用了这么个不太恰当的词 O(∩_∩)O ) 。比较简单的实现了后端以及前端的数据可视化显示的一个流程。

用到的技术也都是很大众化的了,当然后端不仅可以由PHP来完成,JAVA,Python,Golang等等都是可以的,只是使用PHP比较方便罢了。只要可以根据这个接口获取到想要的数据就行。

ECharts, PHP, MySQL, Ajax, JQuery 实现前后端数据可视化的更多相关文章

  1. 从MVC到Ajax再到前后端分离的思考

    前言 一位小妹去面试前端,前端leader问了"什么是ajax?",答:"接收后台的数据,然后然后自己填充和渲染样式":一位小哥去面试后台,技术经理问了&quo ...

  2. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

  3. content-type常见类型辨析(以ajax与springmvc前后端交互为例)

    博客搬家: content-type常见类型辨析(以ajax与springmvc前后端交互为例) 在http报文的首部中,有一个字段Content-type,表示请求体(entity body)中的数 ...

  4. 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能

    使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下 ...

  5. 谈谈《Dotnet core结合jquery的前后端加密解密密码密文传输的实现》一文中后端解密失败的原因

    详情请看<Dotnet core结合jquery的前后端加密解密密码密文传输的实现>,正常来讲,这个博客里面的代码是没有问题的,但是我有时候却会直接报错,原因是后台解密失败:Interna ...

  6. web前后端数据交互

    前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...

  7. 【springMVC】简单的前后端数据交流

    最最常见两种,一则返回视图模板(文档),二则为json数据.就使用一个源代码文件来看看springmvc是怎么做到的. 1.UserController.java源代码文件 (这里额外的使用了fast ...

  8. 前后端数据交互处理基于原生JS模板引擎开发

    json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...

  9. 前后端数据交互(八)——请求方法 GET 和 POST 区别

    WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy! 学习ajax.fetch.axios时,发送网络请求携带参数时,都需要分别处理get和post的参数.所以我 ...

随机推荐

  1. 多线程利器---队列(queue)

    列表是不安全的数据结构 import threading,time li=[1,2,3,4,5] def pri(): while li: a=li[-1] print(a) time.sleep(1 ...

  2. Android Studio安装、配置、第一个程序的那些坑

    最近在上Android课,老师布置了量大题难的作业,然而出师未捷身先死,还没看题目,就被Android Studio的安装和环境配置搞得要死要死的,网上的教程也多也杂,良莠不齐,在经历了5小时通过的搜 ...

  3. NOIP2014-11-3模拟赛

    字符串 题目描述 现在给一个字符串,你要做的就是当这个字符串中存在两个挨着的字符是相同的时就将这两个字符消除.需要注意的是,当把这两个字符消除后,可能又产生一对新的挨着的字符是相同的.比如,初始的字符 ...

  4. BZOJ 4727: [POI2017]Turysta

    4727: [POI2017]Turysta Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 117  Solved ...

  5. SpringBoot学习之mvc

    Spring Boot非常适合Web应用程序开发. 我们可以使用嵌入式Tomcat,Jetty或Undertow轻松创建自包含的HTTP服务器. 大多数Web应用程序将使用spring-boot-st ...

  6. spring boot新建项目启动报:Unregistering JMX-exposed beans on shutdown

    原因为:SpringBoot内置Tomcat没有正常启动,在pom.xml 中添加: <dependency> <groupId>org.springframework.boo ...

  7. django rest-framework 2.请求和响应

    一.请求对象 REST 框架引入Request来扩展常规的HttpRequest,并提供了更灵活的请求解析.Request对象的核心功能是request.data属性. 导入方式: from rest ...

  8. Java Servlet 笔记4

    Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的. 读取 HTTP 头的 ...

  9. c++中sizeof的用法

    /*测试sizeof() 测试环境:windows 7 64位操作系统 VS2012编译器 */ #include <iostream> using namespace std; int ...

  10. Python中生成器和迭代器的功能介绍

    生成器和迭代器的功能介绍 1. 生成器(generator) 1. 赋值生成器 1. 创建 方法:x = (variable for variable in iterable) 例如:x = (i f ...