• ajax案例_校验用户名


    ajax案例_校验用户名

    代码下载

    链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg
    提取码:fgx6
    复制这段内容后打开百度网盘手机App,操作更方便哦

    需求

    输入用户名,失去焦点后,通过ajax访问数据库判断用户名是否被占用。

    流程

    • 搭建环境:数据库、jsp页面
    • 输入用户名,失去焦点
    • 触发js方法,判断数据库是否已有用户名
    • 在指定的span处加入对应的结果(存在、可用)

    搭建环境

    • jsp页面

      其实只要有一个用户名就够了,其他就是为了稍微好看点,并用不到对应的功能。用户名后面的就是一个显示数据或者写数据的地方而已。

      <table border="1px" width="600px">
          <tr>
              
              <td>用户名 :</td>
              <td><input type="text" name="name" id="name"/><span id="span01"></span></td>
          </tr>
          <tr>
              <td>密码 :</td>
              <td><input type="password" name="password" /></td>
          </tr>
          <tr>
              <td>邮箱</td>
              <td><input type="text" name="email" /></td>
          </tr>
          <tr>
              <td>简介</td>
              <td><input type="text" name="info" /></td>
          </tr>
          <tr>
              <td colspan="2"><input type="submit" value="注册" /></td>
          </tr>
      </table>
      
    • sql搭建

      /*创建一个包括用户名和密码的数据库*/
      
      /*创建数据库stus*/
      CREATE DATABASE tuser; 
      /*使用数据库tuser*/
      USE tuser;
      /*创建表t_user*/
      CREATE TABLE t_user(
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(20),
        PASSWORD VARCHAR(20)
      );
      /*插入数据*/
      INSERT INTO t_user VALUES(NULL,'admin','10086'),(NULL,'kaikai','8888');
      INSERT INTO t_user(username,PASSWORD) VALUES('aobama','123'),('titi','234'),('aaa','234234');
      /*查看结果*/
      SELECT * FROM t_user;
      

    开发代码

    1_jsp

    • jsp修改

      <td><input type="text" name="name" id="name" onblur="checkUserName()"/>
      
    • 生成XmlHttpRequest的方法(复制来的)

      function createXmlHttpRequest() {
          var xmlHttp;
          try { // Firefox, Opera 8.0+, Safari
              xmlHttp = new XMLHttpRequest();
          } catch (e) {
              try {// Internet Explorer
                  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e) {
                  try {
                      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (e) {
                  }
              }
          }
          return xmlHttp;
      }
      
    • ajax代码

      先完成功能,在慢慢补全。

      function checkUserName() {
          //1.创建xmlhtttprequest对象
          var request = createXmlHttpRequest();
          //获取姓名输入框的值
          var name = document.getElementById("name").value;
      
          //2.用POST发送请求,模板复制来的,再修修改改
          //checkUserName是我后面设置的servlet名,这里可以转到对servlet的创建处理了
          request.open("POST", "checkUserName", true);
          
          //设置一个请求头,表明发送一个经过post编码的请求
          request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          request.send("name="+name);
      
          //3.获取响应数据
          request.onreadystatechange = function () {
              if (request.readyState === 4 && request.status === 200) {
                  //获取servlet中写好的响应,目前都没有
                  var responseText = request.responseText;
                  //测试能不能得到响应
                  alert(responseText);
                  }
              }
          };
      }
      

    1_servlet

    • servlet三步走

      response.setContentType("text/html;charset=UTF-8");
      //1.获取参数
      String name = request.getParameter("name");
      //2.调用方法
      //这里传给service处理
      CheckUserNameService service = new CheckUserNameServiceImpl();
      boolean isExist = service.checkUserName(name);
      //3.呈现数据,等下再说吧
      

    1_service、dao

    • //service就是调用dao,目前用boolean是OK的
      public boolean checkUserName(String username) throws SQLException {
          UserDao dao = new UserDaoImpl();
          return dao.checkUserName(username);
      
      public boolean checkUserName(String username) throws SQLException {
          QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
          String sql = "SELECT count(*) FROM t_user WHERE username = ?";
          //这里有一个需要注意的地方
          //当用ScalarHandler时,如果用SELECT *不能查到数据时会报空指针异常
          //因此改成count(*)
          long query = runner.query(sql, new ScalarHandler<>(), username);
          return query > 0;
      }
      

    2_servlet

    • 补全servlet的第三步

      //用println是因为可以直接用int数字。如果是write的话就要传String的“1”
      response.getWriter().println(isExist ? 1 : 2);
      

    2_jsp

    • 把第3步改成需要的样子

      当然可以先用alert测试好再改,我这里就不测试了

      request.onreadystatechange = function () {
          if (request.readyState === 4 && request.status === 200) {
              var responseText = request.responseText;
              if (responseText != 1) {
                  document.getElementById("span01").innerHTML = "<font color='green'>可用</font>"
              } else {
                  document.getElementById("span01").innerHTML = "<font color='red'>被占用</font>"
              }
          }
      };
      

    测试后,功能实现,完结撒花


    //这里是用jQuery的post方法改写的,流程和上面差不多
    function checkUserName() {
        //1.得到数据
        var name = $("#name").val();
        //2.发送请求
        $.post("checkUserName", {name : name}, function (data) {
        //3.输出要页面上
            if (data != 1) {
                //可用
                $("#span01").html("<font color='green'>可用</font>")
            } else {
                //不可用
                $("#span01").html("<font color='red'>被占用</font>")
            }
        });
    }
    
  • 相关阅读:
    三大家族的作用和区别
    正则表达式
    Math的方法
    数组API方法
    面向对象方法
    数组的常用方法
    对象和数组的遍历方法
    js运算符(运算符的结合性)
    i++和++i的运算符
    flex
  • 原文地址:https://www.cnblogs.com/richardwlee/p/10326323.html
Copyright © 2020-2023  润新知