Ajax-实现下拉框级联刷新数据

完整资源链接:下载
效果:

Ajax实现下拉框级联刷新数据

贴出JSP关键部分代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello</title>
</head>
<body>
<div>
    省会:
    <select id="option1">
        <option>--请选择省会--</option>
        <c:forEach items="${list}" var="list">
        <option  id="${list.id}">${list.name}</option>
        </c:forEach>
    </select>

    城市:
    <select id="option2">
        <option>--请选择城市--</option>
    </select>
</div>

<script type="text/javascript">
       window.onload = function () {
           //获取下拉框
           var option2 = document.getElementById("option2");
           var option1 = document.getElementById("option1");
           //创建xmlHttpRequest异步对象
           const xmlHttpRequest = new XMLHttpRequest();
           //下拉框点击事件
           option1.onchange = function () {
               removeAllChild();
               //进行Ajax异步请求
               //创建异步对象
               //绑定事件
               xmlHttpRequest.onreadystatechange = function () {
                   //xmlHttpRequest.status是网络请求状态,200表示成功,404找不到,500错误...
                   //xmlHttpRequest.readyState 跟踪异步请求的状态
                   //(0)未初始化
                   //(1)载入
                   //(2)载入完成
                   //(3)交互
                   //(4)完成
                   if (xmlHttpRequest.status==200&&xmlHttpRequest.readyState==4) {//只有当异步请求成功之后才进行数据处理
                       //处理数据
                       //xmlHttpRequest.responseText;可以获取从服务器异步请求的数据
                       var data = xmlHttpRequest.responseText;
                       //将服务器请求返回的JSON数据转换一下
                       var parse = JSON.parse(data);
                       //遍历数据
                       for (var i = 0; i < parse.length; i++) {
                           //创建第二个下拉框的option子元素
                           var newEle = document.createElement("option");
                           //创建第二个下拉框的子元素
                           newEle.innerHTML = parse[i].name;
                           //给这个创建的下拉框设置id值
                           newEle.setAttribute("id",parse[i].id)
                           //把新建的option元素添加到第二个下拉框
                           option2.appendChild(newEle);
                       }
                   }
               }
               //初始化请求数据
               //option1.selectedIndex:获取选中下拉框的索引
               var index = option1.selectedIndex;
               //option1.options[index].id:获取选中下拉框的id值(id可能以后会用到?)
               var id = option1.options[index].id;
               //如果第一个下拉框没有选中有效值,那么进行提示,停止此次异步请求
               if (id==null||id==""){alert("请选择!");return;}
               //open方法初始化请求参数以供 send() 方法稍后使用
               //第一个参数:请求方法
               //第二个参数:请求地址(如果jsp放在某文件夹下面得前面加两点。例如:../CityServlet)
               //第一个参数:是否异步请求,默认true
               xmlHttpRequest.open("get","/CityServlet?id="+id,true);
               //发起请求
               xmlHttpRequest.send();
           }

           /**
            * 这是一个用于删除第二个下拉框所有子元素的方法,
            * 在给第二个下拉框添加新元素之前使用,
            * 如果不删除,那么重复选择第一个下拉框,第二个下拉框会有每次选中省份的城市
            */
           function removeAllChild() {
               //获取第二个下拉框
               //获取下拉框子元素
               var children = option2.children;
               if (children.length>=1){//有子元素则删除
                   //特别注意:这里for循环的写法,寻常写法,删除子节点不完整
                   for (var i = children.length-1; i >=0; i--) {
                       option2.removeChild((children[i]))
                   }
                   //添加一个option,用于提示
                   var element = document.createElement("option");
                   element.innerHTML="--请选择城市--";
                   option2.append(element);
               }
           }

       }

</script>
</body>
</html>

刚刚学习Ajax,之前有用到过,不过多半是使用的jQuery,这里是用的是XmlHttpRequest异步对象实现的局部刷新。
为了复习一下servlet,还特地连接了MySQL数据库,使用动态数据。
在这个过程中遇到了一些问题,也都百度或者调试解决了:
最难受的是Dao层,明明所有代码都没问题,但是connection对象就是空指针,找不到类,而我直接用main方法测试,却是能够成功查询出数据,验证了我的代码没错,后来百度看到一篇问答:里面有提到JNDI 使用tomcat连接数据库要把MySQL jar包放入到tomcat lib目录下面。照着做了,就成功了。具体原因我估计是tomcat运行机制的问题???这里如果有大神还希望替我解惑!

有需要资源的朋友,可以在头部下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值