AJAX---发送POST请求、Get请求、请求四步、解决低版本的缓存问题

目录

一、readyState状态值的理解

二、第一个AJAX请求详解

发送AJAX四步

发送Get请求

解决低版本IE浏览器的AJAX的Get缓存问题

AJAX发送POST请求

AJAX案例:POST请求验证用户名是否可用


一、readyState状态值的理解

二、第一个AJAX请求详解

HTTP常见状态码: 200成功  404资源找不到   500表示服务器内部错误

发送AJAX四步

1.第一步:创建AJAX核心对象XMLHttpRequest
       var xhr = new XMLHttpRequest();
2.第二步:注册回调函数   readystate状态码一改变,这里就执行回调函数(重要)

   当状态码等于4的时候,我们要做一些操作了

            xhr.onreadystatechange = function (){
                //这里的回调函数会被调用多次 0-1 1-2 2-3 3-4 一共调用四次
                //console.log(xhr.readyState)
              //也可以写成xhr.readyState
              if(this.readyState ==4){
                // console.log("响应结束了")
                //下面是http状态码
                if(this.status==4){
                  alert("对不起,您访问的资源不存在,请检查请求路径")
                }else if(this.status ==500){
                  alert("对不起,服务器发生了严重的内部错误,请联系管理员")
                }else if(this.status ==200){
                  alert("响应成功,完美")
                //  通过XMLHttpRequest对象获取响应的信息,通过对象的responseText属性获取相应信息(以字符串的形式
                //  alert( this.responseText)
                  document.getElementById("mydiv").innerText=this.responseText
                }
              }
            }
3.开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
            //    open(method,url,async,user,psw)
            //    method规定请求get或post   asynv:true(异步—)false(同步)
            //    user:可选的用户名称       psw:可选的密码
            //    用户名和密码是进行身份认证的,说明想要访问这个服务器上的资源,可能需要提供一些口令才能访问,需不需要用户名和密码,主要看服务器
            xhr.open("GET","/ajax/ajaxrequest1",true)

//ajax是项目名
 4.发送请求
xhr.send();

  后端代码

@WebServlet("/ajaxrequest1")
public class RequestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //Servlet向浏览器响应一段数据
        PrintWriter out = response.getWriter();
        //out对象向浏览器输出信息
        //这个对象打印输出以后,前端的XMLHttpRequest对象就会接收到
        //out后面可以是普通文本 JSON HTML XML
        out.print("welcome to study ajax!!!");
    }
}

发送Get请求

            // 3.开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
            //获取用户填写的usercode和username
            var usercode = document.getElementById("usercode").value
            var username = document.getElementById("username").value

            xhr.open("GET","/ajax/ajaxrequest2?usercode="+usercode+"&username="+username,true)
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //Servlet向浏览器响应一段数据
        PrintWriter out = response.getWriter();
        String usercode=request.getParameter("usercode");
        String username=request.getParameter("username");
        out.print("usercode="+usercode+"username="+username);
    }

解决低版本IE浏览器的AJAX的Get缓存问题

     下面我们是添加的一个时间戳,当然也可以添加一个随机数

//时间戳
xhr.open("GET","/ajax/ajaxrequest2?t="+new Date().getTime()+"&usercode="+usercode+"&username="+username,true)

AJAX发送POST请求

 xhr.open("POST","/ajax/ajaxrequest3",true)
            //    4.发送请求
            //模拟form变淡提交的关键代码(这段代码一定要在open之后提交)
            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")

            //    放到send()这个函数小括号当中的数据,会自动在请求体当中提交数据
            //    使用js代码获取
            var username = document.getElementById("username").value
            var password = document.getElementById("password").value
            xhr.send("username="+username+"&password="+password)
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //Servlet向浏览器响应一段数据
        PrintWriter out = response.getWriter();
        //获取提交的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        out.print("username="+username+"password="+password);
    }

AJAX案例:POST请求验证用户名是否可用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST验证</title>
</head>
<body>
用户名:<input type="text" id="uname">
<span id="tipMsg"></span>


<script>
    window.onload = function () {
        //失去焦点函数
        document.getElementById("uname").onblur = function () {

            var xhr = new XMLHttpRequest();

            xhr.onreadystatechange = function () {
                if(this.readyState==4){
                    if(this.status ==200){
                        document.getElementById("tipMsg").innerHTML = this.responseText
                    }else{
                        alert(this.status)
                    }
                }
            }

            xhr.open("POST", "/ajax/ajaxrequest5", true)

            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
            var uname = document.getElementById("uname").value
            // var password = document.getElementById("password")
            xhr.send("uname="+uname)
        }
    }
</script>
</body>
</html>

@WebServlet("/ajaxrequest5")
public class RequestServlet5  extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        标记
        boolean flag = false;

        //       获取用户名
        String uname = request.getParameter("uname");

//        连接数据库
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
//            1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
//            2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ajax?serverTimezone=GMT","root","admin");
//            3.获取预编译的数据库操作对象
            String sql = "select id,name from t_user where name=?";
            ps=conn.prepareStatement(sql);
            ps.setString(1,uname);
//            4.执行SQL语句
            rs = ps.executeQuery();
//            5.处理结果集
            if(rs.next()){

//                用户名已经存在
                flag=true;
            }else {
                flag=false;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            6.释放资源
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

//        相应结果到浏览器
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        if(flag){
//            用户名存在
            out.print("<font color='red'>对不起,用户名已存在</font> ");
        }else{
//            用户名不存在
            out.print("<font color='green'>用户名可以使用 </font> ");
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱布朗熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值