echarts异步加载多组数据

  1. 创建的maven项目
  2. 需要echarts.js和jquery.js echarts.min.js jquery-3.2.1.min.js

官网介绍

Echarts官网链接

初步教程

初步教程,搭建环境

异步加载

  1. 异步加载案例有加载一组数据
  2. 加载两组数据
  3. 加载饼图数据

加载一组数据

前台处理

首先看加载条形图的数据结构

option = {
    title: {
        text: 'ECharts 入门示例'
    },
    tooltip: {},
    legend: {
        data:['销量']
    },
    xAxis: {
        data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
    },
    yAxis: {},
    series: [{
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20]
    }]
};;

可以看出,我们主要给的数据是xAxis中的data 以及series中的数据
根据官网的试例,我们先搭好结构,发送请求到后台,拿到数据后填充即可!
先设置完其它的样式,显示一个空的直角坐标轴,然后获取数据后填入数据。(官网原话)

var myChart = echarts.init(document.getElementById('main'));
// 显示标题,图例和空的坐标轴
myChart.setOption({
    title: {
        text: '异步数据加载示例'
    },
    tooltip: {},
    legend: {
        data:['销量']
    },
    xAxis: {
        data: []
    },
    yAxis: {},
    series: [{
        name: '销量',
        type: 'bar',
        data: []
    }]
});
 
// 异步加载数据
$.get('data.json').done(function (data) {
    // 填入数据
    myChart.setOption({
        xAxis: {
            data: data.categories
        },
        series: [{
            // 根据名字对应到相应的系列
            name: '销量',
            data: data.data
        }]
    });
});

在异步加载数据那里我们可以更改成发送ajax的格式请求

$.ajax({
 type : "post",
 async : true,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
 url : "getData.action",    //请求发送
 dataType : "json",        //返回数据形式为json
 success : function(result) {
    // alert(result.categories);
    // alert(result.data);
     //请求成功时执行该函数内容,result即为服务器返回的json对象
     if (result) {
         var categories = result.categories;
          for(var i=0;i<categories.length;i++){    
              //alert( categories[i] );
              categorie.push( categories[i] );    //挨个取出类别并填入类别数组
           }
          var datas = result.data;
          for(var i=0;i<datas.length;i++){   
              data.push( datas[i] );  //挨个取出销量并填入销量数组  
          }
          myChart.hideLoading();    //隐藏加载动画
          myChart.setOption({        //加载数据图表
              xAxis: {
                  data: categorie
              },
              series: [{
                  // 根据名字对应到相应的系列
                  name: '销量',
                  data: data
              }]
          });
     }
},
 error : function(errorMsg) { 
     //请求失败时执行该函数
     alert("图表请求数据失败!");
     myChart.hideLoading();
 }
})

我们先看看服务器返回的数据结构,返回的数据是result

返回的数据是result含有一个categories数组和data数组,所以拿到数据后处理的核心代码就是这一段

这里写图片描述

  1. var categories = result.categories;
    for(var i=0;i<categories.length;i++){    
         //alert( categories[i] );
         categorie.push( categories[i] );    //挨个取出类别并填入类别数组
    }
    var datas = result.data;
    for(var i=0;i<datas.length;i++){   
        data.push( datas[i] );  //挨个取出销量并填入销量数组  
    }

     

拿到数据后再填充到之前创建好的结构。

myChart.setOption({        //加载数据图表
  xAxis: {
      data: categorie
  },
  series: [{
      // 根据名字对应到相应的系列
      name: '销量',
      data: data
  }]
});

 

现在前台OK了,后台处理!

后台处理

因为需要传到前台的数据格式为json,这里使用Google的Gson包

提示一下哦,很多初学者找jar包,这个要积分,那个要积分,很痛苦的,如果你需要一些包可以来这里搜索 

Maven仓库 

Gson包下载地址 

注释蛮清楚了,废话不多说,直接代码~

package com.wy.servlets;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.google.gson.Gson;
 
/**
 * 一组数据异步加载请求处理
 * @author 沪旦铭
 *
 */
public class EchartsOneServlet extends HttpServlet {
 
    private static final long serialVersionUID = 694540269429637504L;
 
    //重写POST方法
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Gson gson = new Gson();
        //传入前台的数据
        Map<String,Object> map = new HashMap<String,Object>();
//        categories: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
//        data: [5, 20, 36, 10, 10, 20]
        List<String> categories = Arrays.asList("衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子");  //new ArrayList<String>();
        List<Integer> data = Arrays.asList(5, 20, 36, 10, 10, 20); //new ArrayList<Integer>();
 
        map.put("categories", categories);
        map.put("data", data);
        //设置返回类型以及编码编码,否则中文会出现乱码情况
        resp.setContentType("application/json;charset=UTF-8");
        //传到前台
        PrintWriter out = resp.getWriter();
        out.print(  gson.toJson(map) );
        out.flush();
        out.close();
    }
}

 

多组数据

多组数据和一组数据差不多,主要看所需要的格式

关键就是这一部分

series:[{ 
        name: '销量', //鼠标放在柱状图上显示的文字
        type: 'bar', //柱状图
        data: [5, 20, 36, 10, 10, 20]
    },{
        name: '第二组数据', //鼠标放在柱状图上显示的文字
        type: 'bar', //柱状图
        data: [4, 21, 30, 21, 12, 66]
    }]

前端处理

 <!-- 多组数据异步加载 -->
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main2" style="width: 600px;height:400px;"></div>
 
    <script type="text/javascript">
        //初始化echarts
        var myChart2 = echarts.init(document.getElementById('main2'));
         // 显示标题,图例和空的坐标轴
         myChart2.setOption({
                title: {
                    text: '多组数据异步数据加载示例'
                },
                tooltip: {},
                legend: {
                    data:[] //这里也需要填充   '第一组数据','第二组数据'
                },
                xAxis: {
                    data: []
                },
                yAxis: {},
                series: [{
                    name: '销量', //这个可不用写
                    type: 'bar', //这个可不用写
                    data: []
                }]
         });
 
         myChart2.showLoading();    //数据加载完之前先显示一段简单的loading动画
 
         var categorie2 = [];    //类别数组(实际用来盛放X轴坐标值)
 
         $.ajax({
         type : "post",
         async : true,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
         url : "getDataMany.action",    //请求发送
         dataType : "json",        //返回数据形式为json
         success : function(result) {
             //请求成功时执行该函数内容,result即为服务器返回的json对象
             if (result) {
                 var categories = result.categories;
                  for(var i=0;i<categories.length;i++){    
                      //alert( categories[i] );
                      categorie2.push( categories[i] );    //挨个取出类别并填入类别数组
                   }
                  var datas = result.data;  //data返回的数值数数值 包括 name type data  
                  var legend = []; // 
                  var series = [];
                  for(var i = 0;i<datas.length;i++){
                      var s = datas[i];
                      //alert( s['name'] );
                      //alert( s['data'] );
                      legend.push(
                         s['name']
                      );
                      series.push({
                          name: s['name'],
                          type: 'bar',
                          data: s['data']
                      });
                  }
                  //alert(series);
                  myChart2.hideLoading();    //隐藏加载动画
                  myChart2.setOption({        //加载数据图表
                      legend:{
                          data: legend
                      },
                      xAxis: {
                          data: categorie2  // X坐标数值
                      },
                      series: series
                  });
             }
        },
         error : function(errorMsg) { //没做出错处理
             //请求失败时执行该函数
             alert("图表请求数据失败!");
             myChart2.hideLoading();
         }
    })
    </script>

后台处理

后台给好数据结构即可

package com.wy.servlets;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.google.gson.Gson;
 
/**
 * 多组数据异步加载请求处理
 * @author 沪旦铭
 *
 */
public class EchartsManyServlet extends HttpServlet {
 
    private static final long serialVersionUID = -360655681801936072L;
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Gson gson = new Gson();
        //转载数据
        Map<String,Object> map = new HashMap<String,Object>();
        List<String> categories = Arrays.asList("衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"); //用来填充X坐标
 
        //用来存取多个数据
        List<Object> manyList = new ArrayList<Object>();
 
        //第一组数据
        //name type data 
        Map<String,Object> many = new HashMap<String,Object>();
        many.put("name", "第一组数据");
        many.put("type", "bar");
        //第一组数据
        List<Integer> data = Arrays.asList(5, 20, 36, 10, 10, 20); 
        many.put("data", data);
        //装入
        manyList.add(many);
        //第二组数据
        Map<String,Object> many2 = new HashMap<String,Object>();
        many2.put("name", "第二组数据");
        many2.put("type", "bar");
        //第一组数据
        List<Integer> data2 = Arrays.asList(4, 10, 26, 15, 18, 20); 
        many2.put("data", data2);
        //装入
        manyList.add(many2);
 
        map.put("categories", categories);
        map.put("data", manyList);
        //设置返回类型以及编码编码,否则中文会出现乱码情况
        resp.setContentType("application/json;charset=UTF-8");
        //传到前台
        PrintWriter out = resp.getWriter();
        out.print( gson.toJson(map) );
        out.flush();
        out.close();
    }
}

饼图异步加载

其实饼图和条形图类似,直接上代码吧

前端处理

 

 <!-- 饼图异步加载 -->
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main3" style="width: 600px;height:400px;"></div>
 
    <script type="text/javascript">
         //初始化echarts
         var myChart3 = echarts.init(document.getElementById('main3'));
          // 显示标题,图例和空的坐标轴
          myChart3.setOption({
                backgroundColor: '#FFFFFF', //设置背景颜色  #FFFFFF   2c343c
                title: {
                    text: '饼图异步加载试列',
                    x: 'center'   //居中显示
                },
                tooltip: {
                    show: true
                },
                legend: {
                    data:[] //这里也需要填充   '第一组数据','第二组数据'
                },
                xAxis: {
                    data: []
                },
                yAxis: {},
                series: [{
                    name: '', 
                    type: 'pie', 
                    radius: '55%', //半径 可调整饼图大小
                    data: [
 
                    ]
                }]
          });
 
         myChart3.showLoading();    //数据加载完之前先显示一段简单的loading动画
         //发送请求
         $.ajax({
         type : "post",
         async : true,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
         url : "getPieData.action",    //请求发送
         dataType : "json",        //返回数据形式为json
         success : function(result) {
             //请求成功时执行该函数内容,result即为服务器返回的json对象
             if (result) {
                  var series = [];
                  var legend = []; //
                  for(var i=0;i<result.length;i++){
                      var res = result[i];
                     // alert( res.value );
                     legend.push( res.name );
 
                      series.push({
                         value: res.value,
                         name: res.name
                      });
                  }
 
                  myChart3.hideLoading();    //隐藏加载动画
                  myChart3.setOption({        //加载数据图表
                      tooltip:{   //设置鼠标放在图形上提示的数据格式   可不设置tooltip
                          trigger: 'item',
                          formatter: "{a}<br/>{b} : {c}({d}%)"
                      },
                      xAxis: {  //隐藏X轴
                          show: false   
                      },
                      yAxis: {  //隐藏Y轴
                          show: false
                      },
                      legend:{
                          orient: 'vertical',
                          left: 'left',
                          data: legend
                      },
                      series: {
                          name: '访问来源', 
                          type: 'pie',  //这个类型不能少,否则js会报错
                          data: series
                      }
                  });
             }
        },
         error : function(errorMsg) { //没做出错处理
                 //请求失败时执行该函数
                 alert("图表请求数据失败!");
                 myChart3.hideLoading();
            }
        })
    </script>

后台处理

package com.wy.servlets;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.google.gson.Gson;
 
public class EchartsPieServlet extends HttpServlet {
 
    private static final long serialVersionUID = 6511473073444195224L;
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          //前台所需格式
//        {value:235, name:'视频广告'},
//        {value:274, name:'联盟广告'},
//        {value:310, name:'邮件营销'},
//        {value:335, name:'直接访问'},
//        {value:400, name:'搜索引擎'}
        Gson gson = new Gson();
        List<Object> list = new ArrayList<Object>();
 
        //数据库查询可循环处理
 
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("value", 235);
        map.put("name", "视频广告");
        list.add(map);
        Map<String,Object> map2 = new HashMap<String,Object>();
        map2.put("value", 274);
        map2.put("name", "联盟广告");
        list.add(map2);
        Map<String,Object> map3 = new HashMap<String,Object>();
        map3.put("value", 310);
        map3.put("name", "邮件营销");
        list.add(map3);
        Map<String,Object> map4 = new HashMap<String,Object>();
        map4.put("value", 335);
        map4.put("name", "直接访问");
        list.add(map4);
        Map<String,Object> map5 = new HashMap<String,Object>();
        map5.put("value", 400);
        map5.put("name", "搜索引擎");
        list.add(map5);
 
        //设置相应contentType
        resp.setContentType("application/json;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println(  gson.toJson(list) );
        out.flush();
        out.close();
    }
}

 

web.xml配置

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance   
    http://www.springmodules.org/schema/cache/springmodules-cache.xsd 
    http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">
 
  <display-name>Archetype Created Web Application</display-name>
 
  <!-- 配置一组数据处理 -->
  <servlet>
        <servlet-name>echartsOneServlet</servlet-name>
        <servlet-class>com.wy.servlets.EchartsOneServlet</servlet-class>
  </servlet>
  <!-- 配置多组数据处理 -->
  <servlet>
        <servlet-name>echartsManyServlet</servlet-name>
        <servlet-class>com.wy.servlets.EchartsManyServlet</servlet-class>
  </servlet>
 
  <!-- 饼图 -->
  <servlet>
        <servlet-name>echartsPieServlet</servlet-name>
        <servlet-class>com.wy.servlets.EchartsPieServlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
        <servlet-name>echartsOneServlet</servlet-name>
        <url-pattern>/getData.action</url-pattern>
  </servlet-mapping>
 
  <servlet-mapping>
        <servlet-name>echartsManyServlet</servlet-name>
        <url-pattern>/getDataMany.action</url-pattern>
  </servlet-mapping>
 
 
  <servlet-mapping>
        <servlet-name>echartsPieServlet</servlet-name>
        <url-pattern>/getPieData.action</url-pattern>
  </servlet-mapping>
 
</web-app>

整个项目请移步

Echarts.7z


效果图

这里写图片描述

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值