echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端

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图表
                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以后,读取返回后的数组的内容。就可以显示了。

echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端,布布扣,bubuko.com

时间: 2024-08-02 02:46:12

echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端的相关文章

AJAX向服务器发送请求

原生的: 1.>:GET请求 $(function () { $("#btnGetDate").click(function () { //开始通过AJAX向服务器发送请求. var xhr; if (XMLHttpRequest) {//表示用户使用的高版本IE,谷歌,狐火等浏览器 xhr = new XMLHttpRequest(); } else {// 低IE xhr=new ActiveXObject("Microsoft.XMLHTTP"); }

观察HTTP协议中客户端向服务器发送的请求,理解并实现一个最简单的AJAX请求案例

一.什么是HTTP协议 HTTP协议即超文本传输协议,网站就是基于HTTP协议的,例如网站的图片.CSS.JS等都是基于HTTP协议进行传输的.HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范. 大白话的说,就是你在浏览器输入一个网址,例如http://baidu.com,这时你就是向百度的服务器发送了请求了....经过一系列你看不到的处理之后,你的浏览器出现一个百度的首页,这就是百度的服务器对你的浏览器的成功的响应. 二.在浏

【03】AJAX 向服务器发送请求

AJAX 向服务器发送请求 创建 XMLHttpRequest 对象后,就可以向服务器发送请求了. XMLHttpRequest 对象的 open() 方法和 send() 方法用来向服务器发送请求. 注意:AJAX 向服务器发送的是 http 请求,与我们浏览网页时发送的 http 请求一样.我们可以右键查看当前网页的源代码,由很多 HTML.CSS和JavaScript 组成,如果我们使用 AJAX 请求当前的 URL ,返回的内容是一样的.(魔芋:也就是说ajax发送的,和我们平时输入网址

nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验证身份,流程如下: 流程如下: 1.客户端获取用户id,并向服务器请求token(注意这里的服务器不是融云的服务器,而是客户端的服务端) 2.客户端的服务端接收到token请求后,向融云的服务器请求token 3.融云服务器接受到token请求,返回token给客户端的服务端. 4.客户端的服务端接

利用HttpURLConnecion通过Nginx向代理邮件服务器发送POST请求

第一步:获取邮件各种参数,通过URLencode和Base64编码之后发送请求参数. 请求参数中,有邮件附件这样的大件,如何当做请求发送呢? 首先,将邮件内容转为字节数组,转为字节数组之后可以当做二进制操作了,保持了附件最原始的面貌,不会被任何其他因素影响. byte[] att= attachment.getContent(); //附件内容 //利用Base64进行加密传输,虽然加密的不够 Base64 base64 = new Base64(); //org.apache.commons.

VMware vSphere client 5.1登录出现这个错误:客户端无法向服务器发送完整请求

故障描述:服务器安装好VMware esxi 5.1,在自己的XP上安装了VMware vSphere client 5.1之后登录出现这个错误:客户端无法向服务器发送完整请求. 原来我另一台服务器安装的是5.0的版本,可以登录到虚拟机,为什么就不能登录到5.1呢?百度了一下,别的TX也有此类问题,但没有解决办法,估计还是客户端的问题,换了一台PC直接在浏览器输入服务器的IP,从打开的WEB页面直接下载Download vSphere Client.安装之后还是同样的问题.后来想到是不是不支持3

AJAX第二例(发送POST请求)

第二例:发送POST请求(如果发送请求时需要带有参数,一般都用POST请求) * open:xmlHttp.open("POST" ....); * 添加一步:设置Content-Type请求头: > xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); * send:xmlHttp.send("username=zhangSa

向微信服务器发送get请求

package weixinRespone; import java.io.IOException; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;im

Springmvc中 同步/异步请求参数的传递以及数据的返回

注意: 这里的返回就是返回到jsp页面 **** controller接收前台数据的方式,以及将处理后的model 传向前台***** 1.前台传递数据的接受:传的属性名和javabean的属性相同 (1).使用基本类型,或引用类型进行接受: @RequestMapping(value="/select") PublicString  select(String name,int age,Model model){ // 这样这里的name,age 就是我们前台传递的参数,也是我们Ja