Echarts与ajax数据的动态交互

初学Echarts,Echarts的官网示例中配置项的数据需要用到js数组来传递数据,所以当我们从后端查询到数据后,往往需要通过ajax来进行数据交互。

这是官方示例的配置项。

<script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));

      // 指定图表的配置项和数据
      var option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      };

      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>

和ajax交互的思路:通过ajax发起请求遍历后台数据库,遍历到的数组通过json格式传递到前台,然后把json数据封装到js数组里面,再让series调用对应的数组即可。

index.html 代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>ECharts</title>

  <!-- 引入 echarts.js -->
  <script type="text/javascript" src="js/echarts.min.js"></script>
  <!-- 引入jquery.js -->
  <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
</head>

<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>

<script type="text/javascript">

  var myChart = echarts.init(document.getElementById('main'));
  // 显示标题,图例和空的坐标轴
  myChart.setOption({
    title: {
      text: '异步数据加载示例'
    },
    tooltip: {},
    legend: {
      data:['销量']
    },
    xAxis: {
      data: []
    },
    yAxis: {},
    series: [{
      name: '销量',
      type: 'bar',
      data: []
    }]
  });

  myChart.showLoading();    //数据加载完之前先显示一段简单的loading动画

  var names=[];    //类别数组(实际用来盛放X轴坐标值)
  var nums=[];    //销量数组(实际用来盛放Y坐标值)

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

      }

    },
    error : function(errorMsg) {
      //请求失败时执行该函数
      alert("图表请求数据失败!");
      myChart.hideLoading();
    }
  })


</script>

</body>
</html>

 

实体类product代码

package bean;

public class product {
    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;
    }

    public product(String name, int num) {
        this.name = name;
        this.num = num;
    }
}

 

TestServlet代码

import bean.product;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = "TestServlet", value = "/TestServlet")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        List<product> list = new ArrayList<product>();

        //这里把“类别名称”和“销量”作为两个属性封装在一个Product类里,每个Product类的对象都可以看作是一个类别(X轴坐标值)与销量(Y轴坐标值)的集合
        list.add(new product("衬衣", 10));
        list.add(new product("短袖", 20));
        list.add(new product("大衣", 30));

        ObjectMapper mapper = new ObjectMapper();    //提供java-json相互转换功能的类

        String json = mapper.writeValueAsString(list);    //将list中的对象转换为Json格式的数组

//System.out.println(json);

        //将json数据返回给客户端
        response.setContentType("text/html; charset=utf-8");
        response.getWriter().write(json);
    }
}

 

效果展示

 

posted @ 2022-08-28 15:39  权。  阅读(919)  评论(0编辑  收藏  举报