AJAX,JSON实现三级联动

AJAX,JSON实现三级联动

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: DPJ
  Date: 2021/6/2
  Time: 14:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function () {
            //AJAX和JSON 实现联动
            //获取国家标签对象,当对象里面的内容发生改变的时候,执行函数
            document.getElementById("country").onchange=function () {

                //创建XMLHttpRequest对象
                var xmlHttp = new XMLHttpRequest();
                //开启一条请求的通道
                xmlHttp.open("post","queryAllArea?cid="+this.value,true);
                //发送请求
                xmlHttp.send();
                //监听请求的状态,请求的状态发生改变的时候,执行函数
                xmlHttp.onreadystatechange = function () {
                    //当请求的状态码为4的时候,表示请求已完成,响应已就绪,此时再执行函数,
                    //不能每次改变都执行函数。
                    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {

                        //当响应信息就绪的时候,获取到地区标签对象
                        var areaEle = document.getElementById("area");
                        //将地区标签对象里面的option都清空
                        areaEle.options.length = 0;
                        //创建一个新的option标签
                        areaOptionEle = document.createElement("option");
                        //将标签里面的内容更改为==区域==
                        areaOptionEle.innerHTML = "==地区==";
                        //将新的option添加到select标签中
                        areaEle.appendChild(areaOptionEle);
                        //为什么要将原来的option删除呢?因为如果不删除,那么前面的就会和后面的area取得的值一起出现
                        //第一将其长度设为0,第二创建新的option添加到里面。
                        //==========================================

                        //获取响应的字符串内容
                        var resText = xmlHttp.responseText;
                        //通过JSON的parse对字符串进行解析,得到的是一个键值对。
                        var jsonObject = JSON.parse(resText);
                        //根据健获取到值,得到的是一个集合。因为我们在Controller层存的是一个集合。
                        var areaList = jsonObject.areas;
                        //遍历集合
                        for (var i = 0; i < areaList.length; i++) {
                            //集合中的每一个元素都是一个对象,通过对象来获取其属性的值。
                            var aid = areaList[i].aid;
                            var aname = areaList[i].aname;
                            //创建一个新的option
                            var newOption = document.createElement("option");
                            //设置新的option的value属性值,因为我们后面还要用到这个去获得对应的城市
                            newOption.setAttribute("value",aid);
                            //设置option里面的内容为aname属性值
                            newOption.innerHTML = aname;
                            //将新的Option添加到select标签对象中
                            areaEle.appendChild(newOption);
                        }
                    }
                }
            }

            document.getElementById("area").onchange=function () {
                var xmlhttp;
                if (window.XMLHttpRequest)
                {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp=new XMLHttpRequest();
                }
                else
                {// code for IE6, IE5
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.open("post","queryCity?aid="+this.value,true);
                xmlhttp.send();
                xmlhttp.onreadystatechange=function () {
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        var cityEle = document.getElementById("city");
                        cityEle.options.length = 0;
                        var cityNewOption = document.createElement("option");
                        cityNewOption.innerHTML = "==城市==";
                        cityEle.appendChild(cityNewOption);
                        var resText = xmlhttp.responseText;
                        var jsonObject = JSON.parse(resText);
                        var jsonobj = jsonObject.cities;
                        for (var i = 0; i < jsonobj.length; i++) {
                            var newOption = document.createElement("option");
                            newOption.innerHTML = jsonobj[i].cityname;
                            cityEle.appendChild(newOption);
                        }
                    }
                }
            }
        }
    </script>
</head>
<body>

<form action="">

    账户:<input type="text" name="uname" value=""> <br>
    密码:<input type="text" name="upassword" value=""> <br>
    确认:<input type="text" name="checkupassword" value=""> <br>
    性别:<input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"><br>
    住址:
    <select name="country" id="country">
        <option value="">==国家==</option>
        <c:forEach var="country" items="${requestScope.countries}">
            <option value="${country.cid}">${country.cname}</option>
        </c:forEach>
    </select>


        <select name="area" id="area">
            <option value="">==地区==</option>
        </select>



        <select name="city" id="city">
            <option value="">==城市==</option>

        </select>
   <br>

    电话:<input type="text" name="uname" value=""> <br>
    邮箱:<input type="text" name="uname" value=""> <br>
    <input type="submit" value="注册">
    <input type="reset" value="重置">
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

86822

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值