Echarts实时更新数据

本文介绍了AJAX技术,它是异步JavaScript和XML,可实现网页异步更新。还阐述了AJAX工作原理,讲解了使用jQuery开发Ajax的方法,包括$.ajax()方法及其参数。此外,展示了Echarts实时更新数据的实现,涉及后端、服务器端和前端编程,并给出结果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先了解一下什么是AJAX

AJAX = 异步 JavaScript 和 XML。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

AJAX工作原理

在这里插入图片描述

使用jQuery开发Ajax

jQuery 的 $.ajax() 方法可以通过发送 HTTP 请求加载服务端数据,是 jQuery 最底层的 Ajax 实现,具有较高的灵活性。

$.ajax([settings])

参数 settings表示 $.ajax() 方法的参数列表,参数格式为 Key-Value对。常用的配置参数为:

参数名称参数类型功能描述
urlString表示发送请求的地址,默认为当前页面地址
typeString表示请求的方式(POST或GET),默认为GET
dataPainObject/Array/String表示发送到服务器的数据
dataTypeString表示服务器返回的数据类型,如XML、JSON、HTML等
beforeSendFunction(XMLHttpRequest)表示发送请求前调用的函数,可用于修改XMLHttpRequest对象,例如添加自定义HTTP头。返回false将取消本次请求
successFunction(data,textStatus)表示请求成功后调用的回调函数;参数data表示由服务器返回,并根据dataType参数进行处理后的数据,可能是XML/JSON/HTML类型;参数textStatus表示描述状态的数据
errorfunction(XMLHttpRequest,textStatus,errorThrown)表示请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。
completefunction(XMLHttpRequest,textStatus)表示请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。

Echarts实时更新数据的实现

后端编程
City.java:

package pojo;

public class City {
    private String name;
    private Integer num;

    public City() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }
}

编写数据访问接口
CityDao.java:

package dao;

import pojo.City;

import java.sql.*;
import java.util.ArrayList;

public class CityDao {
    private static final String url = "jdbc:mysql://localhost:3306/aa?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";

    private static final String user = "root";
    private static final String pwd = "root";
    private static Connection conn = null;

    public ArrayList<City> query(){
        ResultSet rs = null;
        Statement st = null;
        ArrayList<City> cityArr = new ArrayList<City>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            st = conn.createStatement();
            rs = st.executeQuery("select * from tt");
            while (rs.next()){
                City city = new City();
                System.out.println(rs.getString(2)+" "+rs.getString(3));
                city.setName(rs.getString((2)));
                city.setNum(rs.getInt((3)));
                cityArr.add(city);
            }
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return cityArr;
    }
}

服务器端编程
CityServlet.java:

package servlet;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import dao.CityDao;
import pojo.City;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

public class CityServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        response.setCharacterEncoding("UTF-8");
        CityDao cityDao = new CityDao();
        ArrayList<City> cityArr = cityDao.query();
//        response.setContentType("text/html;charset=utf-8");
        String result = JSON.toJSONString(cityArr);
        try {
            response.getWriter().print(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

前端编程
index1.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2020/12/16
  Time: 22:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-1.12.3.js"></script>
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>

</head>
<body onload="loadData()">
<div id="demo" style="height: 300px;width: 300px"></div>
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById('demo'));
        var option = {
            title:{
                text:'Echarts实时更新数据'
            },
            tooltip:{
                show:true
            },
            legend:{
                data:['城市']
            },
            xAxis:[{
                type:'category'
            }],
            yAxis:[{
                type:'value'
            }],
            series:[{
                name:'次数',
                type:'bar'
            }]
        };
        function loadData(option) {
            $.post({
                // type:'post',
                async:false,
                url:'/servlet/CityServlet',
                data:{},
                dataType:'json',
                success:function (result) {
                    if (result){

                        option.xAxis[0].data = [];
                        for (var i = 0; i < result.length; i++){
                            option.xAxis[0].data.push(result[i].name);
                        }

                        option.series[0].data = [];
                        for (var i = 0; i < result.length; i++){
                            option.series[0].data.push(result[i].num);
                        }

                    }
                },
                error:function (errorMsg) {
                    alert("数据加载失败");
                }
            });
        }
        setInterval(function () {
            loadData(option);
            myChart.setOption(option);
        },500);

        window.onload = loadData;
    </script>
</body>
</html>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

        <servlet>
            <servlet-name>CityServlet</servlet-name>
            <servlet-class>servlet.CityServlet</servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>CityServlet</servlet-name>
            <url-pattern>/servlet/CityServlet</url-pattern>
        </servlet-mapping>
</web-app>

结果展示

初始状态:
在这里插入图片描述
插入数据:

在这里插入图片描述
删除数据:
在这里插入图片描述
不过这些数据是我手动添加的,要实现动态添加的话,可以编写一个setInterval方法来不断地获取数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值