json省市联动解析

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        /*
        * 1、在文档加载完成后
        *   获取所有省,添加到<select id="province">中
        *   给<select id="province">这个元素添加onchange事件
        * 事件内容:
        *   1、获取当前选择的省id
        *   2、使用省id访问servlet,得到该省下所有市
        *   3、把每个市添加到<select id="city">中
        * */
        function createXMLHttpRequest() {
            try {
                return new XMLHttpRequest();
            }catch (e) {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    return new ActiveXObject("Micorsoft.XMLHTTP");
                }
            }
        }
        window.onload = function () {
            /*
            * 发送异步请求,得到所有省,然后使用每个省生成一个<option>元素添加到<select id="province">中
            * */
            var xmlHttp = createXMLHttpRequest();
            xmlHttp.open("GET","<c:url value='/ProvinceServlet'/>",true);//打开连接
            xmlHttp.send(null);//发送
            xmlHttp.onreadystatechange = function () {//添加监听
                if (xmlHttp.readyState == 4 ) {
                    if (xmlHttp.status == 200) {
                        var proArray = eval("("+xmlHttp.responseText+")");//执行服务器发送过来的json字符串,得到json的对象
                        for (var i = 0; i<proArray.length; i++) {
                            var pro = proArray[i];//得到每个pro对象
                            var optionEle = document.createElement("option");//创建<option>元素
                            optionEle.value = pro.pid;//<option>的实际值赋为pid,而不是name
                            var textNode = document.createTextNode(pro.name);//使用省名称来创建textNode
                            optionEle.appendChild(textNode);//把textNode添加到option元素中
                            document.getElementById("province").appendChild(optionEle);//把option元素添加到select元素中
                        }
                    }
                }
            };
            //2、给<select id="province">添加change监听
            document.getElementById("province").onchange = function () {
                var xmlHttp = createXMLHttpRequest();//异步请求服务器,得到选择的省下的所有市
                xmlHttp.open("POST", "<c:url value='/CityServlet'/>", true);//打开连接
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置请求头
                xmlHttp.send("pid="+this.value);//发送,用户选择的省
                xmlHttp.onreadystatechange = function () {//添加监听
                    if (xmlHttp.readyState == 4) {
                        if (xmlHttp.status == 200) {
                            /*
                            * 0、先清空原来的<option>元素
                            * 1、得到服务器发送过来的所有市
                            * 2、使用每个市生成<option>元素添加到<select id="city">中
                            * */
                            //清空<select id="city">中的选项
                            var citySelect = document.getElementById("city");
                            var cityOptionArray = citySelect.getElementsByTagName("option");//获取select中的所有子元素
                            while (cityOptionArray.length >1) {
                                citySelect.removeChild(cityOptionArray[1]);
                            }
                            var cityArray = eval("("+xmlHttp.responseText+")");//得到服务器发送过来的所有市
                            for (var i = 0; i<cityArray.length; i++) {
                                var  city= cityArray[i];//得到每个city对象
                                var optionEle = document.createElement("option"); //创建<option>元素
                                optionEle.value = city.cid;//<option>的实际值赋为pid,而不是name
                                var textNode = document.createTextNode(city.name);//使用城市名称来创建textNode
                                optionEle.appendChild(textNode);//把textNode添加到option元素中
                                citySelect.appendChild(optionEle);//把option元素添加到select元素中
                            }
                        }
                    }
                };
            };
        };
    </script>
</head>
<body>
<h1>省市联动</h1>
<select name="province" id="province">
    <option value="">===请选择省份===</option>
</select>
<select name="city" id="city">
    <option value="">===请选择城市===</option>
</select>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值