SpringMVC 10 Ajax技术

10.1 了解 Ajax


我们知道 无论是 重定向 还是 转发,都会 刷新页面重新加载。那么 有么有 一种技术,可以不刷新页面 去更新 页面上的 数据呢。答案是 “有的!”

  • AJAX = Asynchronous JavaScript and XML (异步的 JavaScript 和 XML)。
  • AJAX 是 一种 在 无需重新加载 整个网页的情况下,能够更新部分网页内容的技术。
  • AJAX 不是一种新的 编程语言,而是 一种 用于 创建 更好更快以及交互性更强的 WEB 应用程序的技术。

iframe测试体验页面无刷新

其实最接近于 AJAX 的东西,就是 iframe。没有刷新页面,却能 改变 页面的某个内容。
如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>iframe测试体验页面无刷新</title>
    <script>
        function a(){
            let i = document.getElementById("iframe1");
            let url = document.getElementById("url");
            i.src = url.value;
        }
    </script>
</head>
<body>
<div>
    <p>请输入地址:</p>
    <p>
        <input type="text" id="url">
        <input type="button" value="提交" onclick="a()">
    </p>

</div>
<div>
    <iframe id="iframe1" src="https://www.yuque.com/muquanyu/mhu1q5" frameborder="0" style="width:100%; height: 500px"></iframe>
</div>
</body>
</html>

在这里插入图片描述
利用AJAX可以做:

  • 注册时,输入用户名自动检测用户是否已经存在。
  • 登录时,提示用户名密码是否错误。
  • 删除数据行时,将行ID发送给后台,后台在数据库中删除,然后在所在页面上 数据行也被删除。

10.2 JQuery’s AJAX

纯JS 原生态实现的 AJAX 我们不太建议学习和使用。直接 使用 JQuery 提供的 AJAX 即可。学习成本低,并且使用起来 不是那么麻烦。

  • 通过 JQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON 同时您能够把外部数据直接载入网页的被选元素中。
  • JQuery 不是生产者,而是 大自然的搬运工。
  • JQuery AJAX 本质就是 XMLHttpRequest,对它进行了封装,方便调用!
  1. 下载 JQuery

在这里插入图片描述

在这里插入图片描述

    @RequestMapping("/a1")
    public void a1(String name, HttpServletResponse resp) throws IOException {
        /*我们接收到的数据,是AJAX的data 传递过来的,并没有利用表单和传统传参*/
        System.out.println("a1:param=>" + name);
        if("mqy".equals(name)){
            resp.getWriter().println("true"); // resp 响应一个数据,至于这个数据是 啥格式,咱们可以不管。
        }else{
            resp.getWriter().println("false");
        }
    }
<%--
  Created by IntelliJ IDEA.
  User: muqua
  Date: 2022/7/24
  Time: 19:09
  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="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
    <script>
      function a(){
        $.post({
          url: "${pageContext.request.contextPath}/a1",
          data: {
            "name": document.getElementById("username").value
            //"name": $("#username").val()
          },
          success: (res) => {
            alert(res);
          }
          /*
          success: function (data) {
            alert(data);
          }
          */
        })
      }
    </script>
  </head>
  <body>
<%--  失去焦点的时候,发起一个请求到 后端--%>
  用户名:<input type="text" id="username" onblur="a()"/>
  </body>
</html>

如果 并没有什么反应,没有发送请求。那么 你就得 clear 一下项目,并且重启IDEA和重启tomcat项目。
在这里插入图片描述
clear 项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
xhr 请求 状态码:

  • 404 :找不到 请求得 url / 资源
  • 500 :回调函数 有误。可能 无法 从 Contoller 那里 有效的 返回数据。

我们在 回调函数这里,可以 拿到 状态码

在这里插入图片描述
在这里插入图片描述


10.3 AJAX 异步加载数据

  1. 建立一个 pojo 实体类
package top.muquanyu.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private int age;
    private String gender;
}

在这里插入图片描述
2. 写 Controller 代码

    @RequestMapping("/a2")
    public List<User> a2(){
        User A = new User("A", 18, "男");
        User B = new User("B", 19, "女");
        User C = new User("C", 20, "男");

        List<User> userList = new ArrayList<>();
        userList.add(A);
        userList.add(B);
        userList.add(C);

        return userList;
    }

其实 SpringMVC 是支持 返回 一个 对象 或者 集合的。 也就是说 不光光是 返回 JSON 字符串。这也是它 强大的 一个地方。这样进行 数据的传输 会更加的方便!

在这里插入图片描述
那么 如何 让 这个 数据 通过 AJAX 异步请求 展示到 一个 界面上呢?

  1. 写一个 jsp 界面
<%--
  Created by IntelliJ IDEA.
  User: muqua
  Date: 2022/7/26
  Time: 18:31
  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="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
</head>
<body>
<input type="button" value="加载数据" id="btn">
<table>
    <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
    </tr>
    <tbody id="content">
    </tbody>
</table>
<script>
    $("#btn").click(function (){
        $.post({
            url: "${pageContext.request.contextPath}/a2",
            success: (res) => {
            	let html = "";
                for(let i = 0; i < res.length; ++i){
                    html += "<tr>" +
                        "<td>" + res[i].name + "</td>" +
                        "<td>" + res[i].age + "</td>" +
                        "<td>" + res[i].gender + "</td>"
                        +"</tr>"
                }
                console.log(html);
                $("#content").html(html);
            }
        });
        // 在这个地方写 会失效。必须在 success 里面 及时的去 执行相关代码
    });
</script>
</body>
</html>

success 接收过来数据,最好 就即使的 去处理。别放到 外面的作用域,否则会出现 一些 取不到数据或数据自动消失的情况。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值