当前位置:首页 > PHP

ajax php实现三级联动菜单

2026-04-03 06:04:54PHP

实现三级联动菜单(AJAX + PHP)

数据库准备
创建包含三级数据的表结构(例如省、市、区):

CREATE TABLE `province` (`id` INT PRIMARY KEY, `name` VARCHAR(50));  
CREATE TABLE `city` (`id` INT PRIMARY KEY, `pid` INT, `name` VARCHAR(50));  
CREATE TABLE `district` (`id` INT PRIMARY KEY, `cid` INT, `name` VARCHAR(50));  

前端HTML结构

<select id="province"></select>  
<select id="city"></select>  
<select id="district"></select>  

JavaScript(jQuery AJAX)

$(document).ready(function(){
    // 加载省份数据
    $.get("get_data.php?level=province", function(data){
        $("#province").html(data);
    });

    // 省份变化时加载城市
    $("#province").change(function(){
        var pid = $(this).val();
        $.get("get_data.php?level=city&pid="+pid, function(data){
            $("#city").html(data);
            $("#district").html('<option value="">选择区县</option>');
        });
    });

    // 城市变化时加载区县
    $("#city").change(function(){
        var cid = $(this).val();
        $.get("get_data.php?level=district&cid="+cid, function(data){
            $("#district").html(data);
        });
    });
});

PHP后端处理(get_data.php)

ajax php实现三级联动菜单

<?php
$db = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$level = $_GET['level'] ?? '';

if($level == 'province'){
    $stmt = $db->query("SELECT * FROM province");
    echo '<option value="">选择省份</option>';
    while($row = $stmt->fetch()){
        echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
    }
}
else if($level == 'city' && isset($_GET['pid'])){
    $stmt = $db->prepare("SELECT * FROM city WHERE pid = ?");
    $stmt->execute([$_GET['pid']]);
    echo '<option value="">选择城市</option>';
    while($row = $stmt->fetch()){
        echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
    }
}
else if($level == 'district' && isset($_GET['cid'])){
    $stmt = $db->prepare("SELECT * FROM district WHERE cid = ?");
    $stmt->execute([$_GET['cid']]);
    echo '<option value="">选择区县</option>';
    while($row = $stmt->fetch()){
        echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
    }
}
?>

关键优化点

  • 数据缓存:对静态数据使用Redis缓存
  • 错误处理:AJAX请求添加.fail()回调
  • 防SQL注入:使用PDO预处理语句
  • 前端体验:添加加载状态提示

扩展功能

  • 支持搜索过滤
  • 添加默认选中项
  • 多级联动数据懒加载

标签: 菜单ajax
分享给朋友:

相关文章

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

css二级菜单制作

css二级菜单制作

使用纯CSS制作二级菜单 HTML结构采用嵌套的<ul>和<li>标签,主菜单项包含子菜单: <nav class="menu"> <ul>…

php 实现级联菜单

php 实现级联菜单

实现级联菜单的方法 级联菜单(Cascading Dropdown)通常用于根据前一个选择动态加载下一个菜单的选项。以下是使用PHP和JavaScript(Ajax)实现级联菜单的详细方法。 数据库…

vue实现菜单联动

vue实现菜单联动

实现菜单联动的基本思路 在Vue中实现菜单联动通常涉及父子组件通信或状态管理。核心是通过数据绑定和事件监听,确保一个菜单的选择能触发另一个菜单的更新。 数据准备与结构设计 定义菜单数据时,建议使用嵌…