【Ajax】PHP+JQuery+Ajax实现省市县三级联动

本文介绍了一个基于PHP和jQuery实现的省市县三级联动选择器的前后端代码示例。该选择器通过Ajax异步加载省市县数据,实现了用户友好的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 PHP后台接口

<?php 
    /*
    省市县后台数据接口
    接口调用规则:
    1、参数一:flag,用来区分请求的是省市县中间的那种数据(1:省,2:市;3:县)
    2、参数二:选择省的时候传递pId,选择市的时候传递cId
    http://localhost/select.php?flag=1&pId=23
    http://localhost/select.php?flag=1&cd=2345
    */
    // 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);
    }
?>

其中selectdata.php文件内容节选如下,主要是省市县各种信息。

<?php
 $provinceJson = json_decode('[{"id":"2","province":"\u5317\u4eac\u5e02","parent":"1"},{"id":"19","province":"\u5929\u6d25\u5e02","parent":"1"}]');
  $cityJson = json_decode('[{"id":"2","city":"\u5317\u4eac\u5e02","parent":"1"},{"id":"19","city":"\u5929\u6d25\u5e02","parent":"1"}]');
   $countyJson = json_decode('[{"id":"3","county":"\u4e1c\u57ce\u533a","parent":"2"},{"id":"4","county":"\u897f\u57ce\u533a","parent":"2"}]');
?>

2 前端调用

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>省市县三级联动</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="./jquery.js"></script>
    <style>
    .container{
        background-color: lightgray;
        width: 500px;
        height: 200px;
        margin: 0 auto;
    }
    </style>
</head>
<body>
   <div class="container">
       <label>省:</label>
       <select id="province"><option>
           请选择省份
       </option></select>
       <label>市:</label>
       <select id="city"><option>
           请选择市
       </option></select>
       <label>县:</label>
       <select id="county"><option>
           请选择县
       </option></select>
   </div> 
   <script>
       //公用方法
   function query(obj,callback){
      $.ajax({
          type:'get',
          url:'http://localhost:8080/summary/select.php',
          data:obj,
          dataType:'json',
          success:function(data){
              callback(data);
          }
   });
   }
   query(
       { flag:1},
         function(data){
         var options='';
         $.each(data,function(i,e){
              options+='<option value="'+e.id+'">'+e.province+'</option>';
         });
         $("#province").append(options);
   });
   $("#province").change(function(){
       query({flag:2,pId:$(this).val()},function(data){
        var options='';
        $("#city option:gt(0)").remove();
         $.each(data,function(i,e){
              options+='<option value="'+e.id+'">'+e.city+'</option>';
         });
         $("#city").append(options);
       });
   });
   $("#city").change(function(){
       query({flag:3,cId:$(this).val()},function(data){
        var options='';
        $("#county option:gt(0)").remove();
         $.each(data,function(i,e){
              options+='<option value="'+e.id+'">'+e.county+'</option>';
         });
         $("#county").append(options);
      });
    
   });
   </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值