Ajax使用流程

本文介绍了Ajax在不刷新页面情况下进行局部更新的过程,包括创建XmlHttpReqeust对象、发送Ajax请求、处理服务器响应,以及如何结合JSON和Jackson进行数据交换。同时展示了如何使用axios简化Ajax操作,并通过Ajax实现网页二级联动菜单的示例,以及后端Servlet的处理逻辑。
摘要由CSDN通过智能技术生成

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

Ajax使用流程:

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

1. 创建XmlHttpReqeust对象

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

不同的浏览器创建方式不相同:
在这里插入图片描述

2. 发送Ajax请求

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

![在这里插入图片描述](https://img-blog.csdnimg.cn/882ae23293a34b57a167ec965ea899c6.png

3. 处理服务器响应

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

在这里插入图片描述

JSON语法规则

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

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

Ajax+JSON开发模式:
在这里插入图片描述
JSON序列化组件Jackson

		<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实现二级联动菜单:

<!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>
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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Thymeleaf是一个服务器端的Java模板引擎,如果你想在Thymeleaf中使用Ajax,可以按照以下步骤进行操作: 1. 引入jQuery库 在你的HTML文件中,需要引入jQuery库,因为我们使用jQuery来发送Ajax请求。你可以使用如下代码将jQuery库引入: ```html <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> ``` 2. 编写Ajax请求 在页面中添加一个按钮或其他元素,并为其添加一个点击事件。当点击该按钮时,会发送Ajax请求,并将响应数据渲染到页面上。 ```html <button id="btn">点击我发送Ajax请求</button> <div id="result"></div> <script> $(function () { $('#btn').click(function () { $.ajax({ url: '/url', type: 'POST', data: {param1: 'value1', param2: 'value2'}, success: function (data) { $('#result').html(data); } }) }); }); </script> ``` 这里我们使用了jQuery的`ajax`方法,发送了一个POST请求,并将参数传递到服务器。当请求成功时,将响应数据渲染到页面上。 3. 处理Ajax请求 在服务器端,需要处理Ajax请求并返回响应数据。你可以使用Spring MVC或其他框架来处理Ajax请求。 ```java @PostMapping("/url") @ResponseBody public String handleAjaxRequest(@RequestParam String param1, @RequestParam String param2) { // 处理请求 return "响应数据"; } ``` 这里我们使用了Spring MVC的`@PostMapping`注解,表示处理POST请求。使用`@RequestParam`注解来获取请求参数,并使用`@ResponseBody`注解将返回值转换为JSON格式的数据,发送给客户端。 通过以上步骤,你就可以在Thymeleaf中使用Ajax了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值