Ajax + JSON动态验证用户名是否存在

校验用户名是否存在案例

需求:在注册页面,用户输入用户名后,页面可以自动的反馈该用户名是否可用
分析:首先需要编写一个注册页面registe.html;
然后为用户名输入框添加失去焦点事件;
焦点事件中将用户名信息以异步Ajax方式发送给服务器

注意:
Ajax方式默认接收的数据是text类型的数据,并没有将其当作json类型数据来处理

解决方案

  1. 在Ajax发送数据方法中,添加接收到请求的数据类型设置;即
    $.get()方法中设置type为 "json"
    * 语法 :$.get(url, [data], [callback], [type])
    * url :请求路径
    * data :请求参数
    * callback :响应成功后的回调函数
    * type :返回内容的格式
  2. 服务器端设置响应数据类型为 application/json
    即设置,response.setContentType("application/json;charset=utf-8");

服务器端主要代码

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求编码
        request.setCharacterEncoding("utf-8");
        //设置响应编码
//        response.setContentType("text/html;charset=utf-8");
        response.setContentType("application/json;charset=utf-8");
        // 创建Map集合用来存储响应参数
        Map<String,Object> map = new HashMap<String, Object>();
        // 获取请求参数username
        String username = request.getParameter("username");

        // 判断用户名是否存在
        if("张三".equals(username)){
            //用户已存在
            map.put("userExit",true);
            map.put("msg","此用户名已存在,请更换一个");
        }else {
            // 用户名可用
            map.put("userExit",false);
            map.put("msg","用户名可以使用");
        }

        // 将map转为json
        ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(response.getWriter(),map);
    }

jsp页面主要代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
        <script src="js/jquery-3.3.1.min.js"></script>
    
        <script>
    
            $(function () {
                //为用户名框添加失去焦点事件
               $("input[type='text']").blur(function () {
                   // 获取输入的用户名
                   var username = $(this).val();
    
                   //以Ajax方式发送用户名信息给服务器
                   // 希望接收到的响应消息格式
                   // {"userExit":true,"msg":"此用户名已存在,请更换一个"}
                   // {"userExit":false,"msg":"用户名可以使用"}
                   $.get("reServlet",{username:username},function (data) {
                      //响应成功后的回调函数
                       if (data.userExit){
                           // 用户名已存在
                           $("#span").css("color","red");
                           $("#span").html(data.msg);
                       }else{
                           // 用户名可用
                           $("#span").css("color","green");
                           $("#span").html(data.msg);
                       }
                   },"json");
               });
            });
        </script>
    </head>
    <body>
        <input type="text" name="username" placeholder="请输入用户名">
        <span id="span"></span><br>
        <input type="password" name="password" placeholder="请输入密码"><br>
        <input type="button" value="注册"><br>
    </body>
    </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值