基于echarts+ajax数据库读取数据并返回前端

1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧。

就以官网最简单的那个小demo来做修改吧。官网上的小demo的效果图如下:(很熟悉,有没有)

2.按照echarts的使用方法新建一个echarts.html文件。为ECharts准备一个具备大小(宽高)的Dom(讲的有点细,熟悉的朋友直接跳过)

<!DOCTYPE html><head>
    <meta charset="utf-8">
    <title>ECharts</title></head><body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="height:400px"></div></body>

新建<script>标签引入符合AMD规范的加载器,如esl.js,引入jquery为等一下AJAX发送POST请求做准备

<script src="echarts/esl.js"></script>
 <script src="echarts/jquery.min.js"></script>

路径配置

// 路径配置
 require.config({
            paths:{
                ‘echarts‘ : ‘echarts/echarts‘,
                ‘echarts/chart/bar‘ : ‘echarts/echarts‘
            }
 });

最后是使用:以下代码是官网上的,红色部分的data数据等一下我们修改一下从数据库中去读取

 // 使用
        require(
            [
                ‘echarts‘,
                ‘echarts/chart/bar‘ // 使用柱状图就加载bar模块,按需加载
            ],
            function (ec) {
                // 基于准备好的dom,初始化echarts<a href="http://www.suchso.com/catalog.asp?tags=ECharts%E6%95%99%E7%A8%8B" class="keylink" title=" 图表" target="_blank">图表</a>
                var myChart = ec.init(document.getElementById(‘main‘));
                
                var option = {
                    tooltip: {
                        show: true
                    },
                    legend: {                        data:[‘销量‘]
                    },
                    xAxis : [
                        {                            type : ‘category‘,                            data : ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
                        }
                    ],
                    yAxis : [
                        {                            type : ‘value‘
                        }
                    ],
                    series : [
                        {
                            "name":"销量",
                            "type":"bar",                            "data":[5, 20, 40, 10, 10, 20]
                        }
                    ]
                };
        
                // 为echarts对象加载数据
                myChart.setOption(option);
            }
        );
整个前段页面的代码如下:主要就是修改了option中的xAxis的data和series中的data,这2个data在官网的demo中都是直接写死的,这里我们采用AJAX发送post请求:

<!DOCTYPE html><head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 来自百度CDN -->
    <script src="echarts/esl.js"></script>
    <script src="echarts/jquery.min.js"></script></head><body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="height:400px"></div>
    <script type="text/javascript">
        // 路径配置        require.config({
            paths:{
                ‘echarts‘ : ‘echarts/echarts‘,                ‘echarts/chart/bar‘ : ‘echarts/echarts‘
            }
        });        // 使用        require(
            [                ‘echarts‘,                ‘echarts/chart/bar‘ // 使用柱状图就加载bar模块,按需加载            ],
            drewEcharts
        );         function drewEcharts(ec) {                // 基于准备好的dom,初始化echarts图表                myChart = ec.init(document.getElementById(‘main‘));
                var option = {
                    tooltip: {
                        show: true
                    },
                    legend: {                        data:[‘销量‘]
                    },
                    xAxis : [
                        {
                            type : ‘category‘,
                            data : (function(){                                    var arr=[];
                                        $.ajax({                                        type : "post",
                                        async : false, //同步执行                                        url : "bar.do",                                        data : {},
                                        dataType : "json", //返回数据形式为json                                        success : function(result) {                                        if (result) {                                               for(var i=0;i<result.length;i++){
                                                  console.log(result[i].name);
                                                  arr.push(result[i].name);
                                                }   
                                        }
                                        
                                    },
                                    error : function(errorMsg) {
                                        alert("不好意思,大爷,图表请求数据失败啦!");
                                        myChart.hideLoading();
                                    }
                                   })                                   return arr;
                                })()
                        }
                    ],
                    yAxis : [
                        {                            type : ‘value‘
                        }
                    ],
                    series : [
                        {                            "name":"销量",                            "type":"bar",                            "data":(function(){                                        var arr=[];
                                        $.ajax({                                        type : "post",
                                        async : false, //同步执行                                        url : "bar.do",                                        data : {},
                                        dataType : "json", //返回数据形式为json                                        success : function(result) {                                        if (result) {                                               for(var i=0;i<result.length;i++){
                                                  console.log(result[i].num);
                                                  arr.push(result[i].num);
                                                } 
                                        }
                                    },
                                    error : function(errorMsg) {
                                        alert("不好意思,大爷,图表请求数据失败啦!");
                                        myChart.hideLoading();
                                    }
                                   })                                  return arr;
                            })()
                            
                        }
                    ]
                };              
                // 为echarts对象加载数据                 myChart.setOption(option);       
            }    </script></body>
3.在前一步中AJAX的POST请求的路径是 url : "bar.do" 在web.xml中配置以下映射如下图:

<servlet>
    <servlet-name>helloBar</servlet-name>
    <servlet-class>com.helloBar</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>helloBar</servlet-name>
  <url-pattern>/bar.do</url-pattern>
  </servlet-mapping>
这样,通过bar.do就会找到com这个包下面的helloBar这个servlet.这个servlet的主要作用是向数据库读取数据并返回给前段页面,这里我用的是局部数据源去链接,关于局部数据源怎么连这里我就不讲述了,不会的同学可以在我的博客中找到。当然也可以使用最基本的JDBC去连接。

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //创建了一个bardao的对象,barDAO主要是对数据库的连接和对数据库的操作
        barDAO bardao=new barDAO();
        //调用bardao的select_all()方法把从数据库中读取所有的数据返回的是一个ArrayList,ArrayList里面放的是一个barBean
        ArrayList<barBean> array = bardao.select_all();
        //设置返回时的编码格式
        response.setContentType("text/html; charset=utf-8");
        //调用JSONArray.fromObject方法把array中的对象转化为JSON格式的数组
        JSONArray json=JSONArray.fromObject(array);
        System.out.println(json.toString());
        //返回给前段页面
        PrintWriter out = response.getWriter(); 
        out.println(json); 
        out.flush(); 
        out.close();  
}
数据库的bar表格式如下图:

barBean的代码:

import java.io.Serializable;
import java.sql.Date;
public class barBean {
    private String name;
    private int num;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    
}
barDAO的代码:
public class barDAO {
        private static InitialContext context = null;
        private DataSource dataSource = null;
        private static final String SELECT_ALL = "SELECT*FROM bar ";
        public barDAO(){
            try{
                if(context == null){
                    context = new InitialContext();
                }                dataSource = (DataSource)context.lookup("java:comp/env/jdbc/sampleDS");
            }catch(NamingException e2){
                
            }
        }
        public Connection getConnection(){
            Connection conn = null;
            try{
                conn = dataSource.getConnection();
            }catch(SQLException e){}
            return conn;
        } 
        public ArrayList<barBean> select_all()
        {
             Connection conn = null;
             PreparedStatement pstmt = null;
             ResultSet rst = null;
            try{
                conn = dataSource.getConnection();
                pstmt = conn.prepareStatement(SELECT_ALL);
                rst = pstmt.executeQuery();
                ArrayList<barBean> array = new ArrayList<barBean>();
                while(rst.next())
                {
                    barBean bar = new barBean();
                    bar.setName(rst.getString("name"));
                    bar.setNum(rst.getInt("num"));
                    array.add(bar);
                }
                pstmt.close();
                rst.close();
                return array;
            }catch(SQLException e){
                System.out.println("Error occured at barDAO->select_all()");
                return new ArrayList<barBean>();
            }finally{
                try{
                    conn.close();
                }catch(SQLException e){
                    System.out.println("Error occured at closing connection in barDAO");
                }
            }
        }
}

4.前段的页面在确认ajax请求success以后,读取返回后的数组的内容。就可以显示了。

时间: 2024-12-08 13:28:16

基于echarts+ajax数据库读取数据并返回前端的相关文章

MapX从数据库读取数据形成新图层(C#)

数据|数据库 MapX从数据库读取数据形成新图层(C#) 2005-5-10在C#中实现MapX从数据库读取数据形成新图层分为两个问题:1.         MapX从数据库读取数据形成新图层:2.         将DataTable转换为ADO的Recordset.这里的第二个问题是由第一个问题引起的,因为MapX是一个COM控件,而且它只支持ADO的数据访问方式,而C#编程时一般会使用ADO.NET方式,为此需要在两种方式之间做一下转换.(当然也可以在C#中使用ADO方式,但这毕竟是落后的

求一个能从数据库读取数据并显示到坐标图上的java程序

问题描述 求一个能从数据库读取数据并显示到坐标图上的java程序 新手学java,但是现在急需一个能从数据库读取数据并显示到坐标图上的java程序,希望各位能够给一点帮助,谢谢了 解决方案 http://www.open-open.com/lib/view/open1337915511824.htmlhttp://blog.csdn.net/sjf0115/article/details/7059407 解决方案二:

highcharts如何从SQL Server数据库读取数据生成饼状图

问题描述 highcharts如何从SQL Server数据库读取数据生成饼状图 highcharts如何从SQL Server数据库读取数据生成饼状图 解决方案 这个也是我想关注的问题

jquery ajax php保存数据并返回值

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-

listview-android studiod 从数据库读取数据失败

问题描述 android studiod 从数据库读取数据失败 从数据库读取数据到listview,但是不知为什么,在没添加数据进数据库的时候,能进activity,但是一旦添加进去以后就开始报错了 DBhelper.java public class DBHelper extends SQLiteOpenHelper{ private final static String DATABASE_NAME = "demo.db"; private final static int DAT

数据库读取数据数组格式转换

问题描述 数据库读取数据数组格式转换 array(5) { [0]=> array(2) { ["id"]=> string(1) "1" ["user_name"]=> string(5) "fuwe" } [1]=> array(2) { ["id"]=> string(1) "2" ["user_name"]=> string

分组 排列-从数据库读取数据,到模板输出时按照字段catname的首字母顺序进行分组排列怎么实现?

问题描述 从数据库读取数据,到模板输出时按照字段catname的首字母顺序进行分组排列怎么实现? 如: A-E 阿伟点金 曹氏点金 曹向阳 F-J 何昆宗 海啸 黄建超 韩烨 金界传奇 K-O 刘宁波 刘云灵 李兴淼 李生论 零点拓 P-T 乔振华 孙建发 石勇 U-Z 吴量 沃伦点 小张论金

从数据库读取数据后将其输出成html标签的三种方法_javascript技巧

也许很多人从数据库中读的数据是不需要数据成html标签的,但是也许有一天你们会发现当我们需要输出成html标签时编译器却自动帮我们输出成字符串了这是我们可以这样来 方法1: 最常用的方法,使用JS或JQ JQ: $("#div").html("<span>我是HTML代码</span>"); JS: var dobj=document.getElementById("div"); dobj.innerHTML = &quo

问一个jsp从数据库读取数据然后用CSS排版的问题

问题描述 这个是读取mysql数据库数据并在table中显示出来的代码.通过从数据库读取出的标题与字符串比较,并将标题里面的内容分别输出在对应的标题下.menucontent[0]是标题,menucontent[1]是标题下的子菜单,menucontent[2]是超连接,大神应该都能看懂吧然后用CSS修改了下,运行后是这个效果:不过这是竖着排列的,我想实现每一个标题+子菜单能横着排列.就像下面这样:求大神帮忙,用CSS怎么实现呢........... 解决方案 解决方案二:别用表格了,用<ul>