1. 程式人生 > 其它 >PHP+JQ+html三級聯動

PHP+JQ+html三級聯動

jq+html頁面程式碼:

<!DOCTYPE html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>三級聯動</title>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<div id="ssq"></div>
</body>

<script>
    // 當頁面內容都載入完才執行
    $(document).ready(function (e) {
        // 載入三個下拉列表
        $("#ssq").html("<select id='sheng'></select><select id='shi'></select><select id='qu'></select>");

        // 載入顯示資料
        // 1.載入省份
        FillSheng();
        // 2.載入市
        FillShi();
        // 3.載入區
        FillQu();

        // 當省份選中變化,重新載入市和區
        $("#sheng").change(function () { // 當元素的值發生改變時,會發生 change 事件,該事件僅適用於文字域(text field),以及 textarea 和 select 元素。
            // 載入市
            FillShi();
            // 載入區
            FillQu();
        });

        // 當市選中變化,重新載入區
        $("#shi").change(function () {
            //載入區
            FillQu();
        })
    });


    // 載入省份資訊
    function FillSheng() {
        //取父級代號
        var pcode = "0";

        // 根據父級代號查資料
        $.ajax({
            // 取消非同步,也就是必須完成上面才能走下面
            async: false,
            url: "load",
            data: {pcode: pcode},
            type: "POST",
            dataType: "JSON",
            success: function (data) {

                var str = "";
                // 遍歷陣列,把它放入sj
                for (var sj in data) {
                    //<option value="11">北京</option>
                    str = str + "<option value='" + data[sj].id + "'>" + data[sj].name + "</option>";
                }
                $("#sheng").html(str);
            }
        });
    }

    // 載入市資訊
    function FillShi() {
        // 取父級代號
        var pcode = $("#sheng").val();

        // 根據父級代號查資料
        $.ajax({
            // 取消非同步,也就是必須完成上面才能走下面
            async: false,
            url: "load",
            data: {pcode: pcode},
            type: "POST",
            dataType: "JSON",
            success: function (data) {
                var str = "";
                // 遍歷陣列,把它放入sj
                for (var sj in data) {
                    //<option value="11">北京</option>
                    str = str + "<option value='" + data[sj].id + "'>" + data[sj].name + "</option>";
                }
                $("#shi").html(str);
            }
        });
    }


    // 載入區資訊
    function FillQu() {
        //取父級代號
        var pcode = $("#shi").val();

        // 根據父級代號查資料
        $.ajax({
            // 不需要取消非同步
            url: "load",
            data: {pcode: pcode},
            type: "POST",
            dataType: "JSON",
            success: function (data) {
                var str = "";
                // 遍歷陣列,把它放入sj
                for (var sj in data) {
                    //<option value="11">北京</option>
                    str = str + "<option value='" + data[sj].id + "'>" + data[sj].name + "</option>";

                }
                $("#qu").html(str);
            }
        });
    }
</script>

</html>

php程式碼:

public function load()
    {
        $pcode = $_POST["pcode"];

        $sql_area = mysqli_connect('host', 'user', 'password', 'database');
        // 檢測連線
        if (!$sql_area) {
            //連線失敗
            exit('<h1>資料庫連線失敗</h1>');
        }

        //基於剛建立的連線物件進行一次查詢操作
        $area_data = mysqli_query($sql_area, "SELECT `id`,`pid`,`name`,`level` FROM `sso_area` WHERE pid='{$pcode}'");
        if (!$area_data) {
            exit('<h1>查詢失敗</h1>');
        }
        $area_data_arr = [];
        //遍歷結果集
        while ($row = mysqli_fetch_assoc($area_data)) {
            //列印結果集
            array_push($area_data_arr, $row);
        }

        //釋放結果集
        mysqli_free_result($area_data);

        //斷開與資料庫連線
        mysqli_close($sql_area);

        echo json_encode($area_data_arr);
        die;
    }

資料庫:

CREATE TABLE `sso_area` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `pid` int(10) DEFAULT NULL COMMENT '父id',
  `name` varchar(100) DEFAULT NULL COMMENT '名稱',
  `level` tinyint(4) DEFAULT NULL COMMENT '層級 0 1 2 省市區縣',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `pid` (`pid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='地區表';