ajax - 完成异步用户名校验和异步自动填充.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42986107/article/details/83412524

01_异步用户名校验.

效果如下: 不刷新页面 , 输完用户名之后 , 发送一次请求 , 进行判断 .
在这里插入图片描述

准备工作:

1.首先要创建数据库 , 并初始化表中信息 .
2.导入工具类 和 配置文件.
3.创建好三层架构 , 就ok了.

html页面: aaa.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 导入js类库  -->
    <script src="js/jquery.js"></script>
    <script>
        // 页面加载事件 .
        $(function () {
            // 为用户名输入框绑定失去焦点事件.
            $("[name='username']").blur(function () {
                // 获取用户输入的內容.
                var username = $(this).val();
                // 使用ajax , 不刷新页面的情况下 , 发送请求.
                $.post("/check" , "username="+username , function (data) {
                     // data: 服务器返回的数据.
                     if (data==1){
                         $("#username_msg").html("× 该用户名已经存在了!").css("color","red");
                     }else {
                         $("#username_msg").html("√ 该用户名可用!").css("color","green");
                     }
                })
            })
        })

    </script>
</head>
<body>
    <form method="post" action="#">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"></td>
                <td><span id="username_msg"></span></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="text" name="password"></td>
                <td></td>
            </tr>
            <tr>
                <td colspan='3'><input type="submit" id="sub"></td>
            </tr>
        </table>
    </form>
</body>
</html>

web层: CheckServlet.java

@WebServlet("/check")
public class CheckServlet extends HttpServlet {
    private CheckService cs = BeanFactory.newInstance(CheckService.class);

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=utf-8");
        // 获取用户输入的用户名 .
        String username = request.getParameter("username");
        // 调用方法.
        int count = cs.check(username);
        // 看是否查到数据. 查到 - 1 , 没有 0 .
        if (count==1){
            response.getWriter().print(1);
        }else {
            response.getWriter().print(0);
        }
    }
}

dao层: UserDaoImpl.java

public class CheckDaoImpl implements CheckDao {
    @Override
    public int selectName(String username) {
        // 创建qr对象.
        QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
        // sql语句.
        String sql = "select count(*) from user where name=? ";
        // 执行sql语句.
        try {
            // 因为jdbc底层默认是long类型 , 所以要转换为int类型.
            return ((Long)qr.query(sql,new ScalarHandler(),username)).intValue();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

domain层: user.java

public class User implements Serializable{
    private int id;
    private String name;
	// 编写geter/setter方法 .
}

02_异步自动填充:

效果如下: 自动填充数据库中存的数据 , 前提是不刷新页面.
在这里插入图片描述

jsp页面: bbb.html


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<script type="text/javascript" src="/js/jquery.js"></script>
	<script type="text/javascript">
		// 页面加载事件. 
		$(function () {
			// 键盘按下弹起事件.
			$("#tid").keyup(function () {
			    // 获取输入的值.
                var content = $(this).val();
			    // alert($(this).val())

				if(/^\s*$/.test(content)){
				    // 为空 , 啥也不做.
				}else{
				    // 初始化div里面的信息.
					$("#did").empty();
					// 如果为空 , 隐藏文本框.
					$("#did").hide();

                    //将此输入框值作为参数传递给后台服务器  返回与此相关 小米
                    $.post("/search","content="+content , function (data) {
                        // 判断是否大于0
						if (data.length>0){
                            // 遍历数组.
                            $(data).each(function (index, ele) {
                                // 获取name属性值.
                                var kwName = ele.name;

                                // 添加文本內容.
                                var div="<div style='margin-left: 0px; padding-left: 0px' onmouseout='mout(this)' onmouseover='mover(this)'>"+kwName+"</div>";
                                $("#did").append(div);

                            })

                            $("#did").show();
					}

                    },"json")
				}

            })
        })

		function mout(obj) {
			// 背景色 变回原来的.
			$(obj).css("background-color","white");
        }

        function mover(obj) {
            // 进去之后 换个颜色. .
            $(obj).css("background-color","#999");
        }


	</script>
<title>Insert title here</title>
</head>
<body>
	<center>
		<div>
			<h1>搜索</h1>
			<div>
				<input name="kw" id="tid"><input type="button" value="搜索一下">
			</div>
			<div id="did" style="border: 1px solid red;width: 170px;display: none;">

			</div>
		</div> 
	</center>
</body>
</html>

servlet层: Search.java

@WebServlet("/search")
public class KwServlet extends HttpServlet {
    private KwService ks = BeanFactory.newInstance(KwService.class);

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=utf-8");
        // 获取参数.
        String content = request.getParameter("content");

        // 使用KwService中的方法.
        List<KW> list = ks.findByContent(content);

        // 将查询到的数据 , 转换为json格式.
        String s = JSONArray.fromObject(list).toString();
        response.getWriter().print(s);
    }
}

dao层: search.java

public class KwDaoImpl implements KwDao {
    @Override
    public List<KW> selectByContent(String content) {
        // 创建QueryRunner对象.
        QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
        // 创建sql语句.
        String sql = "SELECT * FROM kw WHERE NAME LIKE ? ";
        try {
            return qr.query(sql, new BeanListHandler<>(KW.class),"%"+content+"%");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

domain层

public class KW {
    private int id;
    private String name;
    // getter / setter方法. 
}

猜你喜欢

转载自blog.csdn.net/qq_42986107/article/details/83412524