欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ajax异步请求 axios

程序员文章站 2022-07-02 12:28:50
...

检查用户名是否已被注册

需求:

 a. 有一个注册的表单, 有注册用户名和密码,一个提交按钮
 b. 用户名输完之后,检测这个用户名是否可用
 c. 就算服务器没有立即响应, 用户还能继续在表单上操作 -> 异步

分析:

1. 用户名输入框注册一个失去焦点事件(onblur)
2. 向服务器发送 异步 请求
3. 服务器响应之后, 提示信息 局部更新到页面上

实现步骤:

1.项目的创建,依然创建maven的web项目

2.导入相关依赖


     <!--
             版本号
         -->
         <properties>
             <c3p0.version>0.9.1.2</c3p0.version>
             <junit.version>4.12</junit.version>
             <servlet.version>3.0.1</servlet.version>
             <beanutils.version>1.6</beanutils.version>
             <commons.logging.version>1.0</commons.logging.version>
             <jstl.version>1.2</jstl.version>
             <log4j.version>1.2.17</log4j.version>
             <mabatis.version>3.5.0</mabatis.version>
             <mysql.version>5.1.18</mysql.version>
         </properties>

         <dependencies>
             <dependency>
                 <groupId>c3p0</groupId>
                 <artifactId>c3p0</artifactId>
                 <version>${c3p0.version}</version>
                 <!--
                     compile:希望三个环境: 编译 测试 运行
                 -->
                 <scope>compile</scope>
             </dependency>
             <!--
                 juint测试架包
             -->
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
             <!--
                 beanutils架包
             -->
             <dependency>
                 <groupId>commons-beanutils</groupId>
                 <artifactId>commons-beanutils</artifactId>
                 <version>${beanutils.version}</version>
             </dependency>
             <!--
                 servlet架包
             -->
             <dependency>
                 <groupId>javax.servlet</groupId>
                 <artifactId>javax.servlet-api</artifactId>
                 <version>${servlet.version}</version>
             </dependency>
             <!--
                 jstl标签库
             -->
             <dependency>
                 <groupId>jstl</groupId>
                 <artifactId>jstl</artifactId>
                 <version>${jstl.version}</version>
             </dependency>
             <!--
                 log4j
             -->
             <dependency>
                 <groupId>log4j</groupId>
                 <artifactId>log4j</artifactId>
                 <version>${log4j.version}</version>
             </dependency>
             <!--
                 mysql数据库
             -->
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>${mysql.version}</version>
             </dependency>
             <!--
                 mybatis
             -->
             <dependency>
                 <groupId>org.mybatis</groupId>
                 <artifactId>mybatis</artifactId>
                 <version>${mabatis.version}</version>
             </dependency>

         </dependencies>

         <build>
             <plugins>
                 <!--配置的是jdk编译器为 1.8-->
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-compiler-plugin</artifactId>
                     <version>3.8.1</version>
                     <configuration>
                         <!-- put your configurations here -->
                         <source>1.8</source>
                         <target>1.8</target>
                     </configuration>
                 </plugin>
                 <!--
                 配置测试中文乱码情况
                 -->
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>2.16</version>
                     <configuration>
                         <forkMode>once</forkMode>
                         <argLine>-Dfile.encoding=UTF-8</argLine>
                     </configuration>
                 </plugin>
                 <!--
                 tomcat7插件 一般不用 可以用做测试是时使用
                 -->
                 <plugin>
                     <groupId>org.apache.tomcat.maven</groupId>
                     <artifactId>tomcat7-maven-plugin</artifactId>
                     <version>2.2</version>
                     <configuration>
                         <port>80</port>
                         <path>/</path>
                     </configuration>
                 </plugin>
             </plugins>
         </build>

         <!--将web工程打成war包-->
         <packaging>war</packaging>
</project>

3.html前端页面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>注册:用户名校验</title>
</head>
<body>
<form action="">
    <input type="text" name="username" placeholder="请输入用户名" id="username">
    <span id="usernameSpan"></span>
    <br>
    <input type="password" name="password" placeholder="请输入密码"> <br>
    <button>提交</button>
</form>
</body>
<script src="js/axios-0.18.0.js"></script>
<script>
    /*
    *   需求: 查看此用户名是否已注册
    *   分析:
    *       1. 前提: 注册的用户存到数据库中了
    *       2. 判断: 数据库中是否有这个用户名
    *           1). 如果有, 提示已被注册不可用
    *           2). 如果没有, 提示可用
    *   前端: 发起请求
    *       事件: onblur
    *       1). 请求的类型: 异步 (不跳转而且只要页面局部更新)
    *       2). axios
    *           a. 请求地址
    *           b .请求参数
    * */
    document.getElementById("username").onblur = function () {
        axios.post("/checkServlet",`username=${this.value}`).then(resp=>{
            let ousernameSpan = document.getElementById("usernameSpan");
            if (resp.data) {
                  ousernameSpan.innerHTML="√";
                  ousernameSpan.style.color="green";
            }else{
                ousernameSpan.innerHTML="×";
                ousernameSpan.style.color="red";
            }
        });
    }
</script>
</html>

4.后台代码(我没有书写出后台访问数据查询的功能,而是直接写"死")

package com.itheima.sh.web;

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;

@WebServlet("/checkServlet")
public class CheckServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1 由于是post请求,所有我们先处理请求乱码
        request.setCharacterEncoding("utf-8");
        //获取请求参数
        String username = request.getParameter("username");
        if ("孙红雷".equals(username)){
            response.getWriter().println("false");
        }else{
            response.getWriter().println("true");
        }
    }
}

5.启动tomcat服务器,并访问页面

5.1当我们输入"张三"时,鼠标离焦时或看到如下现象

Ajax异步请求 axios

 5.1当我们输入"孙红雷"时,鼠标离焦时或看到如下现象

Ajax异步请求 axios

 6.以上就是Ajax利用axios实现异步请求,当然"孙红雷"只是我模拟的从数据库中查询的数据,具体应用时还要以数据库中查询的数据为主.

同时,也欢迎大家提出问题,我会尽我所能为大家解决问题.

相关标签: ajax java