初级Ajax学习——实现二级联动菜单

前台页面

<script type="text/javascript">
          var xmlHttp ;    // 声明全局的xmlHttpRequest对象
          var provinceID = 0 ; //省份id


            //创建xmlHttpRequest对象
           function createXmlHttp(){
            var activeKey = new Array("MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
            if(window.ActiveXObject){               
                for(var i=0;i<activeKey.length;i++){
                    try{
                        xmlHttp = new ActiveXObject(activeKey[i]);
                        if(xmlHttp!=null){
                            return xmlHttp;
                        }
                     }catch(error){
                        continue;
                    }
                }
                throw new Error("客户端浏览器版本低,不支持XMLHttpRequest对象,请更新浏览器");
            }else if(window.XMLHttpRequest){
                xmlHttp = new window.XMLHttpRequest();
                return xmlHttp;
            }
        }

        

         //异步从后台获取省份函数

          function getProvince(){
              xmlHttp = createXmlHttp();         
              xmlHttp.onreadystatechange = readyStateHandler1;    
              xmlHttp.open("POST","provinceServlet",true);     //provinceSerclet实现从数据库获取省份信息
              xmlHttp.send(null);
          }
          
          function readyStateHandler1(){
              if(xmlHttp.readyState==4){
                  if(xmlHttp.status==200){
                      //改变省份下拉列表
                      var xmlDoc = xmlHttp.responseText;             //获取从后台传回的字符串信息
                      createOption(xmlDoc,"province_select");      //创建省份下拉框
                  }
              }
          }
         

          //创建下拉框

          function createOption(msg,selectId){
            var  p_or_c = msg.split(";");
            var select = document.getElementById(selectId);
            for(var i= 0; i< p_or_c.length-1; i++ ){    //创建下拉框
                var  p_or_c_ = p_or_c[i].split(",");
                var oOption = document.createElement("option");  
                select.appendChild(oOption);
                oOption.text = p_or_c_[1];  
                oOption.value = p_or_c_[1];  
                oOption.id = p_or_c_[0] ;
            }
          }


         //查询参数与地址拼接

          function createQueryString(provinceID){    
              var queryString = "http://10.22.70.84:8080/test/ReadCityServlet?"+"provinceID="+provinceID;
              return queryString;
          }
          
          //省份下拉框改变触发函数

          function startRequest(slcprovinceID){
              xmlHttp = createXmlHttp();
              provinceID = slcprovinceID;
              xmlHttp.onreadystatechange = readyStateHandler;
              xmlHttp.open("POST",createQueryString(provinceID),true);   //与后台交互语句
              xmlHttp.send(null);
          }
          
          
          //清空城市下拉框的数据
          function clearCityList(){
            var select_c = document.getElementById("city_select");
            for(var i=1;i<select_c.options.length;)    //i=1,不清楚“option”选项
              {
              select_c.removeChild(select_c.options[i]);   //select_c.option可获取select所有option
              }
          }



          //异步读取数据
          function readyStateHandler(){
              if(xmlHttp.readyState==4){
                  if(xmlHttp.status==200){
                      //改变城市下拉列表
                      var xmlDoc = xmlHttp.responseText;
                      clearCityList();    //清空城市下拉框
                      createOption(xmlDoc,"city_select");    //创建城市下拉框
                  }
              }
          }
          
          window.onload = getProvince;        //页面加载时同时加载省份
      </script>
  </head>  
  <body>
      <div>
        省
        <select id="province_select" name="province_select" οnchange="startRequest(this.options[this.options.selectedIndex].id)">   <!--红色语句获取当前select所选择option-->
             <option value="" SELECTED>请选择</option>
        </select>
        市
        <select id="city_select" name="city_select">      
             <option value="" SELECTED>请选择</option>
        </select>
    </div>
  </body>


Servlet

public class ProvinceServlet extends HttpServlet{
        //定义MYSQL的数据库驱动程序
        public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

        //定义MYSQL数据库的连接地址
        public static final String DBURL = "jdbc:mysql://localhost:3306/test";

        //MYSQL数据库的连接用户名
        public static final String DBUSER = "root" ;

        //MYSQL数据库的连接密码
        public static final String DBPASS = "123456" ;
        
        public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
        {
               Connection con = null;   //数据库连接
               Statement  stmt = null;   //数据库操作
               ResultSet rs = null;  //保存查询结果
               String id = "" ; //定义省份id
               String  name = "" ; //定义省份名称
               String sql = "select * from province" ;  //查询语句
               String msg = "" ;
               
               try{
                    Class.forName(DBDRIVER);   //加载驱动程序
                    //连接MYSQL时要写上连接的用户名和密码
                    con = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
                    stmt = (Statement) con.createStatement() ;  //实例化Statement对象
                    rs = stmt.executeQuery(sql);   // 实例化resultSet对象
                    while(rs.next()){   //指针向下移动
                        id = rs.getString("provinceId");
                        name = rs.getString("provinceName");
                        msg = msg + id + "," + name +";" ;
                    }
                    rs.close(); // 关闭结果集
                    stmt.close();  //操作关闭
                    con.close();   //数据库关闭
               }catch(Exception e){
                   e.printStackTrace();
               }
                resp.setCharacterEncoding("utf-8");         //解决返回参数中文乱码
                PrintWriter out = resp.getWriter();                
                out.write(msg);                  //字符串参数返回
                out.close();
        }
        
        public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
            this.doGet(req,resp);
        }
}


Web.xml

 <servlet>
      <servlet-name>Province</servlet-name>       //与  <servlet-mapping>中的<servlet-name>必须保持一致
      <servlet-class>servlet.ProvinceServlet</servlet-class>          //该servlet所在包的路径
  </servlet>
  <servlet-mapping>
      <servlet-name>Province</servlet-name>
      <url-pattern>/provinceServlet</url-pattern>        //前台访问路径
  </servlet-mapping>
  <servlet>


实现效果




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值