案列分析
思路
建立核心对象
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6fcb65eaf28583f3e01d96213dcfe665.png)
主要用到了Ajax异步交互数据
客户端创建Ajax核心对象,和服务器进行连接及交互数据,如下:
var xml=createXMLHttpRequest()
xml.open('get','xxxxxxxxx')
xml.onreadystatechange=()=>{
}
xml.send(null)
联动思想
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/79efc5454f8884a5d39b49b498d87430.png)
1、获取到各个选项框(利用dom操作)
2、通过Ajax对象建立和服务器中JSON数据的连接
3、获取到的Json数据的省份名称,添加到选项文本节点中
4、同时为用户所选择的省份选项框设置onchange事件用来监听,从而用来修改对应的下一个市级选项框
5、获取用户当前点击省份选项框的文本节点内容,查找JSON数据中对应的省市区级关系
6、将找到对应关系的json数据内容,动态创建选项框并添加到对应的市级选项框文本节点中
代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>三级联动</title>
</head>
<body>
<!-- 三级联动 - 是两个二级联动-->
<select name="sheng" id="province">
<option value="">----</option>
</select>
<select name="shi" id="city">
<option value="">-----</option>
</select>
<select name="qu" id="counties">
<option value="">-----</option>
</select>
<script>
var provinceElement = document.getElementById('province')
var cityElement = document.getElementById('city')
var datas;
var xhr = createXMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200){
var response = xhr.responseText;
datas = JSON.parse(response)
for (var i = 0; i < datas.length; i++){
var data = datas[i];
var province = data.province
var opt = document.createElement('option')
opt.setAttribute('value',province);
opt.textContent = province;
provinceElement.appendChild(opt)
}
}
}
xhr.open('get','server.json');
xhr.send(null);
provinceElement.addEventListener('change',function () {
var cityOpts = cityElement.options;
for (var k = 1;k < cityOpts.length; k++){
cityElement.removeChild(cityOpts[k])
k--;
}
var opts = provinceElement.options;
var index = provinceElement.selectedIndex;
var opt = opts.item(index);
var provinceName = opt.getAttribute('value');
for (var i = 0; i < datas.length; i++){
data = datas[i];
var province = data.province;
if (provinceName === province){
var cities = data.cities;
for (var j = 0; j<cities.length;j++){
var city = cities[j].city;
var opt = document.createElement('option')
opt.setAttribute('value',city);
opt.textContent = city;
cityElement.appendChild(opt)
}
}
}
})
function createXMLHttpRequest() {
var httpRequest;
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) { }
}
}
return httpRequest;
}
</script>
</body>
</html>