Ajax使用流程

Ajax在不刷新页面的情况下,进行页面局部更新。

Ajax使用流程:

  1. 创建XmlHttpReqeust对象
  2. 发送Ajax请求
  3. 处理服务器响应

1. 创建XmlHttpReqeust对象

XmlHttpReqeust对象是Ajax的核心,使用该对象发起请求,接收响应

不同的浏览器创建方式不相同:

2. 发送Ajax请求

  • xmlhttp.open()创建请求
  • xmlhttp.send()发送到服务器

3. 处理服务器响应

  • xmlhttp.onreadystatechange()事件用来监听Ajax执行过程
  • xmlhttp.readyState属性说明XMLHttpRequest当前状态
  • xmlhttp.status属性代表服务器响应状态码

JSON语法规则

  • 数据由key:value键值对描述
  • {}代表一个完整对象,拥有多个键值对
  • []保存数组,多个对象之间使用,分隔

JSON是一种轻量级文本数据交换格式,javascript天然支持JSON。

Ajax+JSON开发模式:

JSON序列化组件Jackson

xml 复制代码
		<dependency>
			<!--添加jackson依赖-->
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>

将对象序列化为JSON字符串:

发起Ajax请求并处理响应

Ajax组件库-axios

http://axios-js.com/zh-cn/docs/

axios简化了Ajax的操作

axios发送GET请求:

axios发送POST请求:

Ajax默认是异步的方式执行。

Ajax同步和异步的区别:

  • 同步是在服务器未返回JSON前,JS程序一直处于阻塞状态
  • 异步是在服务器未返回JSON前,JS程序不阻塞,Ajax通过回调获取结果

Ajax同步方式请求:

因为是同步方式,监听事件不会被执行,当代码顺序执行到这一行时,说明请求已经返回

Ajax实现二级联动菜单:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/js/axios.js"></script>
</head>
<body>
    <select id="lv1" style="width:200px;height:30px">
        <option value="-1" selected>请选择</option>
    </select>
    <select id="lv2" style="width:200px;height:30px"></select>

<script>
    var lv1=document.getElementById("lv1");
    axios.get("/channel",{params:{"level":1}})
    .then(function(response){
        var json=response.data;
        for(var i=0;i<json.length;i++){
            var channel=json[i];
            lv1.options.add(new Option(channel.name,channel.code))
        }
    }).catch(function(error){
    });
    var lv2=document.getElementById("lv2");
    lv1.onchange=function(){
        axios.get("/channel",{params:{"level":2,"parent":lv1.value}})
        .then(function(response){
            var json=response.data;
            lv2.length=0;//	清除二级菜单原来的数据
            for(var j=0;j<json.length;j++) {
                lv2.options.add(new Option(json[j].name,json[j].code))
            }
        }).catch(function(error){
        });
    }
</script>
</body>
</html>
java 复制代码
package ajax.servlet;

import ajax.entity.Channel;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/channel")
public class ChannelServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String level = req.getParameter("level");
        String parent = req.getParameter("parent");
        List<Channel> chlist=new ArrayList<>();
        if(level.equals("1")){
            chlist.add(new Channel("ai","人工智能"));
            chlist.add(new Channel("web","前端开发"));
        }else if(level.equals("2")){
            if(parent.equals("ai")){
                chlist.add(new Channel("dl","深度学习"));
                chlist.add(new Channel("cv","计算机视觉"));
                chlist.add(new Channel("nlp","自然语言处理"));
            }else if(parent.equals("web")){
                chlist.add(new Channel("html","超文本标记语言"));
                chlist.add(new Channel("css","级联样式表"));
                chlist.add(new Channel("js","javascript脚本"));
            }
        }
        ObjectMapper objectMapper=new ObjectMapper();
        String json=objectMapper.writeValueAsString(chlist);
        resp.setContentType("application/json;charset=utf-8");
        resp.getWriter().println(json);
    }
}
相关推荐
学习使我快乐014 小时前
AJAX 2——Bootstrap弹框使用、图书管理案例、图片上传方法
ajax·okhttp·bootstrap
Zheng11314 小时前
【可视化大屏】将柱状图引入到html页面中
javascript·ajax·html
前端李易安14 小时前
ajax的原理,使用场景以及如何实现
前端·ajax·okhttp
萧鼎1 天前
Python常见问题解答:从基础到进阶
开发语言·python·ajax
儒雅的烤地瓜1 天前
JS | 如何解决ajax无法后退的问题?
前端·javascript·ajax·pushstate·popstate事件·replacestate
学习使我快乐012 天前
AJAX 1——axios体验、认识URL、常用请求方法、HTTP协议、错误处理、form-serialize插件
前端·http·ajax·okhttp·axios
冬至喵喵4 天前
SPARK调优:AQE特性(含脑图总结)
大数据·ajax·spark
懒洋洋大魔王4 天前
7.Javaweb-Ajax
前端·ajax·okhttp
人生の三重奏4 天前
前端——Ajax和jQuery
前端·ajax·jquery
马船长4 天前
沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞
前端·sql·ajax