前端技术之Ajax(一)

同步交互

首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后,按照预先编写好的程序中的业务逻辑进行处理,比如和数据库服务器进行数据信息交换。最后,服务器对请求进行响应,将结果返回给客户端,返回一个HTML在浏览器中显示,通常会有CSS样式丰富页面的显示效果。

异步交互

所谓异步交互是指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。异步不用等所有操作等做完,就响应用户请求。即先响应用户请求,然后慢慢去写数据库,用户体验较好。

AJAX

在这里插入图片描述
Ajax最大的特点:异步访问,局部刷新。

异步验证用户名占用问题

在页面上持续操作过程中,发送了一次请求,这时后台服务器进行运算,运算完后,结果响应给浏览器。在浏览器上在当前页面上无需跳转页面,可以继续其它操作的同时, 响应回来的信息可以展示到页面上。

@WebServlet("/unameCheckServlet.do")
public class UnameCheckServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uname = req.getParameter("uname");
        String info = "";
        System.out.println(uname);
        if ("msb".equals(uname)){
            info="用户名已经占用";
        }else {
            info="用户名可用";
        }
        //向浏览器响应数据
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().print(info);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
    <script>
        var xhr;

        function checkUname() {
            //获取输入框中的内容
            var unameDOM = document.getElementById("unameI");
            var unameText = unameDOM.value;
            var unameInfoDom = document.getElementById("unameInfo");
            if (null == unameText || unameText == '') {
                unameInfoDom.innerText = "用户名不能为空";
                return;
            }
            unameInfoDom.innerText = "";
            //发送异步请求
            //获取一个XMLHttpRequest对象,对象可以帮助我们发送异步请求
            xhr = new XMLHttpRequest();
            //使用xhr对象设置打开链接,设置请求方式和参数xhr.open("请求方式","请求的url",是否使用异步方式)
            xhr.open("GET", "unameCheckServlet.do?uname=" + unameText, true);
            //设置回调函数
            xhr.onreadystatechange = showReturnInfo;
            //正式发送请求
            xhr.send(null);
        }

        function showReturnInfo() {
            if (xhr.readyState == 4 && xhr.status == 200) {
              var returnInfo = xhr.responseText;
              var unameInfoDom = document.getElementById("unameInfo");
              unameInfoDom.innerText = returnInfo;
            }
        }
    </script>
</head>
<body>
<form action="myServlet1.do">
    用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()"><span id="unameInfo" style="color: red"></span><br/>
    密码:<input type="text" name="pwd"><br/>
    <input type="submit">
</form>
</body>
</html>

<html>
<head>
    <title>$Title$</title>
    <meta charset="UTF-8"/>
    <script src="js/jquery.min.js"></script>
    <script>

        function checkUname() {
            //获取输入框中的内容
            if (null == $("#unameI".valueOf()) || $("#unameI").valueOf() == '') {
                $("#unameInfo").text("用户名不能为空");
                return;
            }
            $("#unameInfo").text("");
            //通过jQuery.ajax()发送异步请求
            // $.ajax({属性名:属性值,属性名:属性值,方法名:方法})
            $.ajax(
                    {
                        type:"GET",
                        url:"unameCheckServlet.do?",
                        data:"uname="+$("#unameI").val(),
                        success:function (info){
                            $("#unameInfo").text(info)
                        },
                        error:function() {
                            alert("失败响应")
                        }
                    }
                )
        }

    </script>
</head>
<body>
<form action="myServlet1.do">
    用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()">
    <span id="unameInfo" style="color: red"></span><br/>
    密码:<input type="text" name="pwd"><br/>
    <input type="submit">
</form>
</body>
</html>

采用原生js或jQuery的异步交互效果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

༄༊心灵骇客༣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值