ajax异步请求简单实现

1 篇文章 0 订阅

一、ajax基础

1.1、ajax的概念

  • AJAX:Asynchronous JavaScript and XML 异步的 JavaScript 和 XML;本质是JavaScript语言中一种技术,它包含了html,css,JavaScript,xml,json等。
  • AJAX 是一种用于创建快速动态网页的技术。

1.2、AJAX的作用

  • 实现与用户交互;
  • 实现页面局部刷新;
  • 节省带宽,从而提高请求效率。

1.3、AJAX的工作原理图

在这里插入图片描述

二、Controller注解方式

  • 注意,@Controller + @ResponseBody 相当于 @RestController,返回值不走视图解析器。
    1、Controller
 /**
     * 验证用户是否存在
     * @param userName
     * @return
     */
//    @GetMapping("CheckUserName")
    @PostMapping("CheckUserName")
    @ResponseBody
    public String CheckUserName(@RequestParam String userName){
        Users users =  usersService.queryByUsername(userName);

        if(users != null){
            return "exists";
        }else{
            return "not exist";
        }
    }

2、register.jsp中的JavaScript

<script>
        function checkUser() {
            var userName = document.getElementById("userName").value.trim();
            var ajax1;
            //  1.创建XMLHttpRequest对象
            if (window.XMLHttpRequest) {
                //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                ajax1 = new XMLHttpRequest();
            }else {
                // IE6, IE5 浏览器执行代码
                ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
            }
            //  2.  设置onreadystatechange事件的回调
            ajax1.onreadystatechange = function () {
                if(ajax1.readyState == 4 && ajax1.status == 200){
                    if(ajax1.responseText == "exists"){
                        document.getElementById("msg").innerText = "该用户名已存在,请重命名";
                        document.getElementById("msg").style.color="red";
                    }else{
                        document.getElementById("msg").innerText = "该用户名可以使用";
                        document.getElementById("msg").style.color="green";
                    }
                }
            }
            //  3.open();
            //  4.  send()发送请求
            // ajax1.open("GET", "CheckUserName?userName=" + userName, true);
            // ajax1.send();
            ajax1.open("POST", "CheckUserName", true);

            ajax1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            ajax1.send("userName=" + userName);
        }
    </script>

3、register.jsp中的html

<input type="text" placeholder="账号(用户名)" name="userName" id="userName" onblur="checkUser()" required=""><span id="msg"></span>  

三、传统servlet方式

1、servlet

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.Arrays;
import java.util.List;

@WebServlet(name = "CheckUserServlet", urlPatterns = "/CheckUserServlet")
public class CheckUserServlet extends HttpServlet {
    List<String> users = Arrays.asList("suwukong", "zhubajie", "tangtang", "shaseng");

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        if(users.contains(username)){
            response.getWriter().write("exists");
        }else{
            response.getWriter().write("not exist");
        }
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

2、register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index ajax</title>
</head>
<body>
<h1>this is ajax index page.</h1>

<input type="button" value="ajax发送get请求" onclick="sendGetAjax()">
<input type="button" value="ajax发送post请求" onclick="sendPostAjax()">
<script>
    function sendGetAjax() {

        var ajax1;

        //  1.创建XMLHttpRequest对象
        if (window.XMLHttpRequest) {
            //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
            ajax1 = new XMLHttpRequest();
        }else {
            // IE6, IE5 浏览器执行代码
            ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
        }

        //  2.  设置onreadystatechange的回调函数
        ajax1.onreadystatechange=function(){
            //console.log(ajax1.readyState)

            /**
             *  innerText直接将文本内容显示,不解析各种html标签
             *  innerHTML将文本内容进行显示,带有标签的部分会自动解析
              */

            if(ajax1.readyState == 4 && ajax1.status == 200){
                //document.getElementById("imgs").innerHTML= ajax1.responseText;
                alert(ajax1.responseText)
            }
        }

        //  3. open()打开连接
        ajax1.open("GET", "AjaxServlet?username=zhangsan&password=888888", true);

        //  4. 发送请求
        ajax1.send();

        //alert(ajax1);
    }

    function sendPostAjax() {
        var ajax1;

        //  1.创建XMLHttpRequest对象
        if (window.XMLHttpRequest) {
            //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
            ajax1= new XMLHttpRequest();
        }else {
            // IE6, IE5 浏览器执行代码
            ajax1= new ActiveXObject("Microsoft.XMLHTTP");
        }

        //  2.  设置onreadystatechange的回调函数
        ajax1.onreadystatechange=function(){
            //console.log(ajax1.readyState)

            /**
             *  innerText直接将文本内容显示,不解析各种html标签
             *  innerHTML将文本内容进行显示,带有标签的部分会自动解析
             */

            if(ajax1.readyState == 4 && ajax1.status == 200){
                //document.getElementById("imgs").innerHTML= ajax1.responseText;
                alert(ajax1.responseText)
            }
        }

        //  3. open()打开连接
        ajax1.open("POST", "AjaxServlet", true);
        ajax1.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        //  4. 发送请求
        ajax1.send("username=zhangsan&password=123456");
        //alert(ajax1);
    }
</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值