先了解一下什么是AJAX
AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。
AJAX工作原理
使用jQuery开发Ajax
jQuery 的 $.ajax() 方法可以通过发送 HTTP 请求加载服务端数据,是 jQuery 最底层的 Ajax 实现,具有较高的灵活性。
$.ajax([settings])
参数 settings表示 $.ajax() 方法的参数列表,参数格式为 Key-Value对。常用的配置参数为:
参数名称 | 参数类型 | 功能描述 |
---|---|---|
url | String | 表示发送请求的地址,默认为当前页面地址 |
type | String | 表示请求的方式(POST或GET),默认为GET |
data | PainObject/Array/String | 表示发送到服务器的数据 |
dataType | String | 表示服务器返回的数据类型,如XML、JSON、HTML等 |
beforeSend | Function(XMLHttpRequest) | 表示发送请求前调用的函数,可用于修改XMLHttpRequest对象,例如添加自定义HTTP头。返回false将取消本次请求 |
success | Function(data,textStatus) | 表示请求成功后调用的回调函数;参数data表示由服务器返回,并根据dataType参数进行处理后的数据,可能是XML/JSON/HTML类型;参数textStatus表示描述状态的数据 |
error | function(XMLHttpRequest,textStatus,errorThrown) | 表示请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。 |
complete | function(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方法来不断地获取数据。