ajax实现城市三级联动

html

同以往的城市三级联动原生js代码一样

<select name="sheng" id="sheng">
        <option value="-1">请选择</option>
 </select>
  <select name="shi" id="shi">
      <option value="-1">请选择</option>
  </select>
  <select name="qu" id="qu">
      <option value="-1">请选择</option>
  </select>
json数据格式

在这里插入图片描述

js
//封装请求数据的方法
 function ajaxJson(method, url, callback) {
 //第一步 创建xhr对象
     var xhr = null;
     //兼容性处理
     if (window.XMLHttpRequest) {
         xhr = new XMLHttpRequest()
     } else {
         xhr = new ActiveXObject('Microsoft.XMLHTTP')
     }
     //第二步绑定监听事件
     xhr.onreadystatechange = function() {
     // 当xhr.readyState == 4 说明已经完全接受响应的数据
     // xhr.status为响应HTTP的状态
         if (xhr.readyState == 4) {
             if (xhr.status == 200) {
             //将xhr.responseText响应返回的数据装换为对象的形式,传入function中
                 callback(JSON.parse(xhr.responseText));
             }
         }
     }
     //第三步建立连接 
      //第一个参数为请求的方法
      //第二个参数为请求的数据链接
      //第三个参数为boolean类型 true为默认异步进行  false 为同步进行
     xhr.open(method, url, true)
     //第四步 发送请求
     xhr.send(null)
 }
 
 //首先一开始就需要请求所有的省的数据,并且添加到省级的下拉框中
 ajaxJson('POST', 'city.json', function(res) {
     for (var key in res) {
         var option = document.createElement('option')
         option.value = key;
         option.innerText = res[key].name;
         document.getElementById('sheng').appendChild(option)
     }
 })
 
//省
document.getElementById('sheng').onchange = function() {
//当省级的下拉框中的内容发生改变时,还未失焦前,全局变量shengval
  shengval = this.value
  ajax读取json文件的数据,请求方式为post方法
   ajaxJson('POST', 'city.json', function(res) {
       //获取所选择的省份的市区 city 数组
       var data = res[shengval].city;
       //初始化市区的下拉框内容
       document.getElementById('shi').innerHTML = '<option value="-1">请选择</option>'
       document.getElementById('qu').innerHTML = '<option value="-1">请选择</option>'
       // 将读取的city数组中的name数据添加到市的select中
       for (var key in data) {
           var option = document.createElement('option')
           option.value = key;
           option.innerText = data[key].name;
           document.getElementById('shi').appendChild(option)
       }
   })
}

//市 (同上)
 document.getElementById('shi').onchange = function() {
     shival = this.value
     ajaxJson('POST', 'city.json', function(res) {
         var data = res[shengval].city[shival].area;
         console.log(data)
         document.getElementById('qu').innerHTML = '<option value="-1">请选择</option>'
         for (var key in data) {
             var option = document.createElement('option')
             option.value = key;
             option.innerText = data[key];
             document.getElementById('qu').appendChild(option)
         }
     })
 }
//区
 document.getElementById('qu').onchange = function() {
 //当区中的内容发生改变时,清空省市里面的下拉选项
     shival = null
     shengval = null
 }
 

php
<?php


    $data = [];
    echo $data;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值