AJAX实现省市县三级联动效果


Posted in Javascript onOctober 16, 2021

最近在学AJAX做到这个省市县三级联动的案例,这里只是讲一下ajax请求的一些知识,对服务端数据.php文件就不叙述了。
(tips:其实省市县三级联动只需要引入jQuery省市县三级联动插件就可以实现)

效果图

AJAX实现省市县三级联动效果

首先准备两个服务端文件,另一个文件太长,这里就不导入了

selsect.php

<?php 
    /*
    省市县后台数据接口
 接口调用规则:
 1.参数一:flag,用来区分请求的是省市县中间的那种数据
 2.参数二:选择省的时候传递pid,选择市的时候传递cId
 http://localhost/select.php?flag=1#pId=23
    */
    // include('./selectdata.php');
    require('./selectdata.php');
    // 省市县数据来自selectdata.php文件
    $province = $provinceJson;
    $city = $cityJson;
    $county = $countyJson;

    $flag = $_GET['flag'];
    // 省级数据
    if($flag == 1){
        echo json_encode($province);
    // 市级数据
    }else if($flag == 2){
        $pId = $_GET['pId'];
        $cityData = array();
        foreach ($city as $value) {
            if($value->id == $pId){
                // 直辖市
                array_push($cityData,$value);
                break;
            }else if($value->parent == $pId){
                // 非直辖市
                array_push($cityData,$value);
            }
        }
        echo json_encode($cityData);
    // 县级数据
    }else if($flag == 3){
        $cId = $_GET['cId'];
        $countyData = array();
        foreach ($county as $value) {
            if($value->parent == $cId){
                array_push($countyData,$value);
            }
        }
        echo json_encode($countyData);
    }
?>

select.html

这里可以用 底层ajax 请求,也可以用快捷方法 $.get 方法进行数据请求。因为请求的服务端文件跟当前文件 同源 ,所以不需要进行 跨域 请求。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title></title>
  <script src="jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript">
   $(function($){
    function queryData(obj,callback){
     // $.ajax({
     //  type:'get',
     //  url:'http://localhost/AJAX/select.php',
     //  data:obj,
     //  dataType:'json',
     //  success:function(data){
       
     //   callback(data);
     //  }
     // });
     $.get('http://localhost/AJAX/select.php',obj,function(data){
      callback(data);
     },'json');
    };
    queryData({
     flag:1
    },function(data){
     var option = '';
     $.each(data,function(i,e){
      option += '<option value="' + e.id + '">' + e.province +'</option>'
     });
     $('#province').append(option);
    });
    $('#province').change(function(){
     // 避免数据叠加
     $('#city').find('option:gt(0)').remove();
     queryData({
      flag:2,
      pId:$(this).val()
     },function(data){
      var option = '';
      $.each(data,function(i,e){
       option += '<option value="' + e.id + '">' + e.city +'</option>'
      });
      $('#city').append(option);
     });
    });
    $('#city').change(function(){
     $('#county').find('option:gt(0)').remove();
     queryData({
      flag:3,
      cId:$(this).val()
     },function(data){
      var option = '';
      $.each(data,function(i,e){
       option += '<option value="' + e.id + '">' + e.county +'</option>'
      });
      $('#county').append(option);
     });
    });
   });
  </script>
  <style type="text/css">
   #container{
    width: 500px;
    min-height: 300px;
    margin: auto;
    text-align: center;
    padding: 10px;
    
   }
  </style>
 </head>
 <body>
  <div id="container">
   <label>
    省:
    <select id="province">
     <option >请选择省...</option>
    </select>
   </label>
   <label>
    市:
    <select id="city">
     <option >请选择市...</option>
    </select>
   </label>
   <label>
    县:
    <select id="county">
     <option >请选择县...</option>
    </select>
   </label>
  </div>
 </body>
</html>

这里还需要说明的是:使用$.ajax方法请求时,如果第二次ajax请求依赖于第一次请求的结果,那么第二次请求必须放到回调函数内部,这是因为ajax 异步 请求。

类似于这样

$.ajax({
 type:'get',
 url:'citycode.php',
 data:{cityName:city},
 dataType:'json',
 // 如果第二次ajax请求依赖于第一次请求的结果,那么第二次请求必须放到回调函数内部
 success:function(data){
  $.ajax({
   type:'get',
   url:'cityweather.php',
   data:{cityCode:data.cityCode},
   dataType:'json',
   success:function(res){
   data = res.retData;
   var tag = '<ul><li>风向:'+data.WD+'</li><li>风级:'+data.WS+'</li><li>海拔:'+data.altitude+'</li><li>日期:'+data.date+'</li><li>最高温度:'+data.h_tmp+'</li><li>最低温度:'+data.l_tmp+'</li><li>平均温度:'+data.temp+'</li><li>日出时间:'+data.sunrise+'</li><li>日落时间:'+data.sunset+'</li><li>纬度:'+data.latitude+'</li><li>经度:'+data.longitude+'</li></ul>'
   $('#info').html(tag);
   }
  })
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 选择器理解
Mar 16 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
Apr 02 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
javascript操作excel生成报表示例
May 08 Javascript
Javascript中数组sort和reverse用法分析
Dec 30 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
微信小程序实现多选框全选与取消全选功能示例
May 14 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 #Vue.js
JS中如何优雅的使用async await详解
Oct 05 #Javascript
js中Object.create实例用法详解
Oct 05 #Javascript
TypeScript中条件类型精读与实践记录
Oct 05 #Javascript
SSM VUE Axios详解
Ajax实现三级联动效果
Oct 05 #Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 #Javascript
You might like
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
去除php注释和去除空格函数分享
2014/03/13 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
在视频前插入广告
2006/11/20 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
nodejs基础知识
2017/02/03 NodeJs
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python错误处理操作示例
2018/07/18 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
自荐书模板
2013/12/19 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
三个儿子教学反思
2014/02/03 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
单位授权委托书范本
2014/09/26 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
病假条格式范文
2015/08/17 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers