省市县三级联动AJAX实现(附MySQL数据)

4 篇文章 0 订阅
3 篇文章 0 订阅

省市县三级联动是web开发中常用的功能,网上有很多实现的方法,笔者在这也提供一中ajax实现的方法(后台php处理)。
html代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title>省市县</title>
<style>
.box {
	margin-left:20px;
	margin-top: 20px;
	width: 300px;
	height: 200px;
	border: 1px dashed black;
}
h2 {
	text-align: center;
}
span {
	font-size:20px;
	width: 66px;
	height: 30px;
	margin-left: 20px;
	display: inline-block;
}
select {
	width: 100px;
	height: 30px;
	font-size:16px;
}
.sub {
	margin-left: 200px;
	margin-top: 5px;
	width: 70px;
	height: 30px;
	font-size:20px;
	line-height: 20px;
	background-color: rgb(49, 159, 229);
	color: white;
	border-radius: 3px;
	border: none;
}
</style>
<script src="js/jquery.js"></script>
</head>
<body>
<div class='box'>
    <h2>省市县/区三级联动</h2>    
    <form id="pcc" action="action.php" method="POST">
        <span>&nbsp;&nbsp;&nbsp;:</span>    
        <select id="pro" name="pro">
        </select><br/>

        <span>&nbsp;&nbsp;&nbsp;:</span>    
        <select id="city"  name="city">
        </select><br/>

        <span>县/区:</span>    
        <select id="county"  name="county">
        </select><br/>
        <input class="sub"  type="submit" value="提交" >
    </form>
</div>
<script>
$(function(){
    $.ajax({
        type:"POST",
        cache:false,
        url:"pcc.php",
        data:{"pid":0},
        dataType:"json",
        success:function(data){
            var option='<option>--请选择--</option>';
            $.each(data,function(i,n){
                option += '<option value="'+n.id+'">'+n.areaname+'</option>';
            })
            $("#pro").append(option);
        }
    });

    $("#pro").change(function(){
        var pid=$(this).val();
        $.ajax({
        type:"POST",
        cache:false,
        url:"pcc.php",
        data:{"pid":pid},
        dataType:"json",
        success:function(data){
        //追加本级option前,先清除city和county的option,以免重选时干扰
            $("#city option").remove(); 
            $("#county option").remove();
            var option='<option>--请选择--</option>';
            $.each(data,function(i,n){
                option += '<option value="'+n.id+'">'+n.areaname+'</option>';
            })
            $("#city").append(option);
        }
        });
    });
    
    $("#city").change(function(){
        var pid=$(this).val();
        $.ajax({
        type:"POST",
        cache:false,
        url:"pcc.php",
        data:{"pid":pid},
        dataType:"json",
        success:function(data){
        //同上
            $("#county option").remove();
            var option='<option>--请选择--</option>';
            $.each(data,function(i,n){
                option += '<option value="'+n.id+'">'+n.areaname+'</option>';
            })
            $("#county").append(option);
        }
        });
    });
})
</script>
</body>
</html>
  • 本方法需要用到jquery,请自行下载

如上所示,本文将选项<option>都放在ajax请求里,ajax请求每次提供pid(初始值为0,即顶级id),返回两个参数,本级id和父级pid;通过chang事件追加需要提供的<option>

php代码如下:

pcc.php

<?php 
require("mysqldb.php");

$mydb=new MysqliDB();

$pid=$_POST['pid'];

$sql="select * from cn_area where parentid=$pid;";
// echo $sql;exit;
$datas=$mydb->select($sql);

echo json_encode($datas);

mysqldb.php:

<?php
class MysqliDB { 

    private  $conn;

    function __construct(){
        $conn=mysqli_connect('127.0.0.1','root','*****','test');
        if(!$conn){
            die("连接失败".mysqli_connect_error());
        }
        mysqli_query($conn,'set names utf8');
        $this->conn=$conn;
    }
    function select($sql) {
        $result=mysqli_query($this->conn,$sql);    
        $data=array();
        // var_dump($result);exit;
        while( $arr=mysqli_fetch_assoc($result) ){
            $data[]=$arr;
        }    
        return $data;     
    }
    function close() {
     mysqli_close($this->conn);
    }

action.php

<?php
require("mysqldb.php");
$mydb=new MysqliDB();

//print_r($_POST);exit;
$sql="select * from cn_area where id IN(".$_POST['pro'].",".$_POST['city'].",".$_POST['county'].");";
// echo $sql;exit;
$datas=$mydb->select($sql);
// echo "<pre>";
// print_r($datas);exit;
$addr="";
foreach( $datas as $v){
    $addr .= $v['areaname'];
}
echo "您选则的地址为:".$addr."<br/>";
echo "<a href='' onclick='window.history.back();'>点击返回</a>"
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值