zoukankan      html  css  js  c++  java
  • Ajax实现全国省市三级联动

    <%@ 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" src="vendors/bootstrap3/js/jquery-3.1.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            
            //初始化
            $.ajax({
                url:"ChinaServlet",
                data:{},
                type:"POST",
                dataType:"xml",
                success:function(sf){            
                    var s=$(sf).find("root name").length;
                    var op;
                    for(var i=0;i<s;i++){
                        var name=$(sf).find("name").eq(i).text();
                        var code=$(sf).find("name").eq(i).attr("code");
                        op+="<option value="+code+">"+name+"</option>";
                    };
                    $("#pro").append(op);
                },
            });                
            
            //
            $("#pro").change(function(){
                var id=$(this).val();
                $("#city option:gt(0)").remove();
                $('#county option:gt(0)').remove();
                $.ajax({
                    
                    url:"ChinaServlet",
                    data:{proId:id},
                    type:"POST",
                    dataType:"xml",
                    success:function(sf){
                        var s=$(sf).find("root city").length;
                        
                        var op;
                        for(var i=0;i<s;i++){
                            var name=$(sf).find("city").eq(i).text();
                            var code=$(sf).find("city").eq(i).attr("code");
                            op+="<option value="+code+">"+name+"</option>";
                        };
                        $("#city").append(op);
                    },
                    
                });
            });
            
            //
            $("#city").change(function(){
                var id=$(this).val();
                $('#county option:gt(0)').remove();
                $.ajax({
                    
                    url:"ChinaServlet",
                    data:{citId:id},
                    type:"POST",
                    dataType:"xml",
                    success:function(sf){
                        var s=$(sf).find("root county").length;
                        var op=null;
                        for(var i=0;i<s;i++){
                            var name=$(sf).find("county").eq(i).text();
                            op+="<option>"+name+"</option>";
                        };
                        $("#county").append(op);
                    },
                    
                });
            });
                    
            
        });
        
        
    </script>
    </head>
    <body>
        <select id="pro">
            <option style="text-align: center">--请选择省份--</option>
        </select>
        <select id="city">
            <option style="text-align: center">--请选择地市--</option>
        </select>
        <select id="county">
            <option style="text-align: center">--请选择区县--</option>
        </select>
    </body>
    </html>

    下面是servlet代码

    package com.inba.maya.china;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.inba.maya.bean.Area;
    import com.inba.maya.bean.City;
    import com.inba.maya.bean.Province;
    import com.inba.maya.dao.AreaDao;
    import com.inba.maya.dao.CityDao;
    import com.inba.maya.dao.ProvinceDao;
    
    /**
     * Servlet implementation class ChinaServlet
     */
    @WebServlet("/ChinaServlet")
    public class ChinaServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ChinaServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                    //转码
                    request.setCharacterEncoding("utf-8");
                    response.setCharacterEncoding("utf-8");                
                    response.getWriter().append("<?xml version="1.0" encoding="UTF-8"?>");
                    response.getWriter().append("<root>");
                    
                    
                    if(request.getParameter("proId")!=null){//如果获取到省份的id
                        String proId=request.getParameter("proId");
                        try {
                            ArrayList<China> listCity=new ChinaDao().select(proId);
                            for(China c:listCity){
                                response.getWriter().append("<city code='"+c.getCode()+"'>"+c.getName()+"</city>");//循环写xml文本
                            }                                                
                        } catch (Exception e) {
                            e.printStackTrace();
                        }                    
                    }else if(request.getParameter("citId")!=null){//如果获取到地市的id
                        String citId=request.getParameter("citId");
                        try {
                            ArrayList<China> listCounty=new ChinaDao().select(citId);
                            for(China c:listCounty){
                                response.getWriter().append("<county code='"+c.getCode()+"'>"+c.getName()+"</county>");//循环写xml文本
                            }                                                
                        } catch (Exception e) {
                            e.printStackTrace();
                        }                
                    }else{//当都没有获取到的时候,就是初始化的
                        
                        ArrayList<China> listProv;
                        try {
                            listProv = new ChinaDao().select("0001");                                                
                            for(China c:listProv){
                                response.getWriter().append("<name code='"+c.getCode()+"'>"+c.getName()+"</name>");
                            }                                                                        
                        } catch (Exception e) {
                            e.printStackTrace();
                        }                    
                    }
                    
                    
                    response.getWriter().append("</root>");
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    上面是采用的xml格式来传递数据的,下面再采用JSON格式来获得数据

    <%@ 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" src="jquery/jquery-3.1.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            //身份初始化
            $.ajax({            
                url:"JsonTest",
                data:{},
                type:"POST",
                dataType:"JSON",
                success:function(pro){
                    var s=pro.pro.length;//取出返回JSON对象中的key所对应的值(它是一个数组)的长度
                    var option;
                    for(var i=0;i<s;i++){//拼接字符串循环添加城市
                        option+="<option value="+pro.pro[i].code+">"+pro.pro[i].name+"</option>";
                    }
                    $("#pro").append(option);
                }            
            });
            
            //当省份改变时
            $("#pro").change(function(){
                $("#city option:gt(0)").remove();
                $("#country option:gt(0)").remove();
                var proId=$(this).val();
                $.ajax({
                    url:"JsonTest",
                    data:{proId:proId},
                    type:"POST",
                    dataType:"JSON",
                    success:function(city){
                        var s=city.city.length;
                        var option;
                        for(var i=0;i<s;i++){
                            option+="<option value="+city.city[i].code+">"+city.city[i].name+"</option>";
                        }
                        $("#city").append(option);
                    }
                });
            });
            
            //当城市改变时
            $("#city").change(function(){
                $("#country option:gt(0)").remove();
                var cityId=$(this).val();
                $.ajax({
                    url:"JsonTest",
                    data:{cityId:cityId},
                    type:"POST",
                    dataType:"JSON",
                    success:function(country){
                        var s=country.country.length;
                        var option;
                        for(var i=0;i<s;i++){
                            option+="<option>"+country.country[i].name+"</option>";
                        };
                        $("#country").append(option);
                    }
                });
            });
            
        });
    </script>
    </head>
    <body>
        <select id="pro">
            <option style="text-align: center">--请选择省份--</option>
        </select>
        <select id="city">
            <option style="text-align: center">--请选择地市--</option>
        </select>
        <select id="country">
            <option style="text-align: center">--请选择区县--</option>
        </select>
    </body>
    </html>
    package com.maya.json;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    
    
    
    
    /**
     * Servlet implementation class JsonTest
     */
    @WebServlet("/JsonTest")
    public class JsonTest extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private ChinaDao china=new ChinaDao();
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public JsonTest() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
             * JSON格式可以无限嵌套
             * JSONObject的格式是{key:value,key:{key:value}}
             * JSONArray的格式是[{key:value},{key:value},{key:value},{key:value}]
             * 
             * JSONObject和JSONObject相结合的格式{key:[{key:value},{key,value}]}
             * {省份:[{代号:名称}],[{11:北京}]}
             * {城市:[{代号:名称}],[{1101:北京市辖}]}
             * {区县:[{代号:名称}],[{110101:东城区}]}
             * 
             * */
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            JSONObject jsonObject=new JSONObject();
            if(request.getParameter("proId")!=null){//初始化显示省份
                String proId=request.getParameter("proId");
                try {
                    ArrayList<China> citList=china.select(proId);
                    JSONArray objArray=new JSONArray();
                    for(China c:citList){
                        JSONObject p=new JSONObject();//把找出的每一个城市都new成一个对象,分别设置它的name和code,然后添加到数组当中
                        p.put("name", c.getName());
                        p.put("code", c.getCode());
                        objArray.put(p);
                    }
                    jsonObject.put("city", objArray);//最后把数组添加到JSONObject中
                } catch (Exception e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }else if(request.getParameter("cityId")!=null){
                String cityId=request.getParameter("cityId");
                try {
                    ArrayList<China> couList=china.select(cityId);
                    JSONArray objArray=new JSONArray();
                    for(China c:couList){
                        JSONObject p=new JSONObject();
                        p.put("name", c.getName());
                        objArray.put(p);
                    }
                    jsonObject.put("country", objArray);
                } catch (Exception e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }else{
                try {
                    ArrayList<China> proList=china.select("0001");
                    JSONArray objArray=new JSONArray();
                    for(China c:proList){
                        JSONObject p=new JSONObject();
                        p.put("name", c.getName());
                        p.put("code", c.getCode());
                        objArray.put(p);
                    }
                    jsonObject.put("pro", objArray);
                } catch (Exception e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }            
            }
            response.getWriter().append(jsonObject.toString());
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    Bootstrap
    格式化字符串
    闭包函数与装饰器
    正则表达式
    jQuery
    分布式-锁-1.1 多线程锁无法满足的场景
    effective python 读书笔记-第22条: 尽量用辅助类来维护程序的状态,而不要用字典
    effective python 读书笔记:第21条-用只能以关键字形式指定的参数来确保代码明晰
    effective python 读书笔记:第20条-用None和文档字符串来描述具有动态默认值的参数
    git如何将上游(upstream)新建分支(origin没有)导入到origin中?
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6484736.html
Copyright © 2011-2022 走看看