zoukankan      html  css  js  c++  java
  • jsp+ajax+serverlet实现省市二级联动

    jsp界面

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
        
        
    <!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">
    <title>Insert title here</title>
    <script type="text/javascript">
    function loadProvince() {
        var req = new XMLHttpRequest();
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                var data = req.responseText;
                
                var myObj = eval("(" + data + ")");
                
                //eval函数:格式化函数--将字符串转化为javascript对象的函数
                for (var i = 0; i < myObj.length; i++) {
                    var oneProvince = myObj[i];
                    var opKey = oneProvince.split("-")[0];
                    var opValue = oneProvince.split("-")[1];
                    
                    //找到province对应的下拉框
                    var proSelectObj = document.getElementById("proId");
                    
                     var newOption = document.createElement("OPTION");
                     newOption.value = opKey;
                     newOption.innerHTML = opValue;
                    
                     proSelectObj.appendChild(newOption);
                }
                
                //执行一次加载城市
                loadCity();
            }
        };
        req.open("post", "pa", true);
        req.send(null);
    }
    
    function loadCity() {
        var proSelectObj = document.getElementById("proId");
        
        //获取到当前选中的省份,并用于数据库查询
        var proIdToDB = proSelectObj[proSelectObj.selectedIndex].value;
        
        var req = new XMLHttpRequest();
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                var data = req.responseText;
                var myObj = eval("(" + data + ")");
                
                var citySelectObj = document.getElementById("cityId");
                //清理原来的城市信息
                while (citySelectObj.childNodes.length > 0) {
                    citySelectObj.removeChild(citySelectObj.lastChild);
                }
                
                for (var i = 0; i < myObj.length; i++) {
                    var oneCity = myObj[i];
                    var cityKey = oneCity.split("-")[0];
                    var cityValue = oneCity.split("-")[1];
                    
                    var newOption = document.createElement("OPTION");
                    newOption.value = cityKey;
                    newOption.innerHTML = cityValue;
                    
                    citySelectObj.appendChild(newOption);
                }
            }
        };
        req.open("post", "ca", true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req.send("proId=" + proIdToDB);
    }
    </script>
    </head>
    <body onload="loadProvince()">    <!-- 当页面加载完毕时执行 -->
    
    省:
    <select id="proId" onchange="loadCity()"> <!-- 选项option变更的时候触发事件 -->
    </select>
    
    城市:
    <select id="cityId">
    </select>
    </body>
    </html>

    serverlet 获取地市数据

    package com.shxt.lesson15.servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ProvinceAjaxServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //加载省份信息
            request.setCharacterEncoding("utf-8");
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/lingyun1", "root", "mysql");
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("select * from shxt_province");
                
                ArrayList<String> provinceList = new ArrayList<String>();
                while (rs.next()) {
                    String key = rs.getString("PROID");
                    String value = rs.getString("PRONAME");
                    provinceList.add(""" + key + "-" + value + """);
                }
                
                response.setContentType("text/html; charset=utf-8");
                PrintWriter out = response.getWriter();
                System.out.println(provinceList);
                
                out.print(provinceList);
                
                out.flush();
                out.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    
    }

    Serverlet 根据地市代码获取城市数据

    package com.shxt.lesson15.servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class CityAjaxServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            try {
                String proId = request.getParameter("proId");
                String sql = "select * from shxt_city where PROID = '" + proId + "'";
                Class.forName("com.mysql.jdbc.Driver");
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/lingyun1", "root", "mysql");
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                
                ArrayList<String> cityList = new ArrayList<String>();
                while (rs.next()) {
                    String key = rs.getString("CITYID");
                    String value = rs.getString("CITYNAME");
                    cityList.add(""" + key + "-" + value + """);
                }
                
                response.setContentType("text/html; charset=utf-8");
                PrintWriter out = response.getWriter();
    
                out.print(cityList);
                
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

     小例子

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!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">
    <title>Insert title here</title>
    <!-- ajax 异步交互(javascript和xml的形式) -->
    <script type="text/javascript">
    function validData() {
        
        var value1 = document.getElementById("myText1").value;
        var value2 = document.getElementById("myText2").value;
        
        //请求对象 request
        var req = new XMLHttpRequest();
        
        //创建一个监听函数:监视ajax的各个状态:
        //1、open状态:servlet(可以接收参数)
        //2、send发送:发送参数、【重点】需要设置请求头部信息
        //3、reciving反馈:servlet开始向页面发送反馈信息
        //4、loaded载入:servlet发送的信息全部接收完毕
        req.onreadystatechange = function() {
            if (req.readyState == 1) {    //open:准备时间
                var mySpan = document.getElementById("showPosition");
                mySpan.innerHTML = "<img src='a.jpg' />";
                document.getElementById("myBtn").style.display = "none";
            } else if (req.readyState == 4) {
                var data = req.responseText;
                document.getElementById("myBtn").style.display = "block";
                document.getElementById("showPosition").innerHTML = data;
            }
        };
        
        //(用post方式)打开myAjax服务应用(Server applet)
        req.open("post", "myAjax", true);
        
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        //发送
        req.send("a=" + value1 + "&b=" + value2);
    }
    </script>
    
    </head>
    <body>
    <input id="myText1" /><br />
    <input id="myText2" onblur="validData()" /><span id="showPosition"></span><br />
    <input />
    <input type="button" id="myBtn" value="提交" />
    </body>
    </html>

    serverlet

    package com.shxt.lesson15.servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class AjaxServlet extends HttpServlet {
    
        /**
         * Input/Output    字节流(byte的流)
         * Reader/Writer 字符流(char的流)
         * InputStreamReader ---- 将input转为reader(byte流变char流)
         * */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            try {
                String txt1 = request.getParameter("a");
                String txt2 = request.getParameter("b");
                
                System.out.println(txt1 + ", " + txt2);
                
                Thread.sleep(5000);
                
                //【重点】设置正文类型 -- 页面html
                response.setContentType("text/html; charset=utf-8");
                
                //servlet向页面发送信息,需要一个response的响应对象
                PrintWriter out = response.getWriter();    //Writer流(字符型输出流---向目标写入信息)
                
                out.print("返回的信息:发送成功");
                
                out.flush();    //刷新--流中的数据清空
                out.close();    //流、关闭
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    Delphi的类和对象(九)- 类运算符as、is
    delphi中as,is关键字是如何工作的?
    delphi 中 as 和 is 的使用
    甘超波:NLP发问技巧
    甘超波:NLP如何挖掘信念
    甘超波:NLP自我价值感
    甘超波:NLP次感元
    甘超波:NLP前提假设之每个人都有足够资源,能达成成功的资源
    甘超波:NLP十二条前提假设之重复旧的行为,只会得到旧的结果
    甘超波:NLP十二条前提假设之诺要求知、必须行动
  • 原文地址:https://www.cnblogs.com/Small-Life/p/3893098.html
Copyright © 2011-2022 走看看