根据第一个 select 的值获取第二个 select 的选项

Get the options for second select depending on the value of my fisrt select

嗨,我需要一些帮助。

我有 2 个下拉菜单。在第一个中,我选择了一个城市的名称

<select id="select1" class="select" name="city">
<option value="101000000">city1</option>
<option value="102000000">city2</option>
<option value="103000000">city3</option>
</select>

在第二个中,我想每次都动态显示 selected 城市的所有城市

<select id="select2" name="municipality[]" multiple="multiple"></select>

所以为了获取所有城市,我这样做

<script>
    $("#select1").on("change", function() {
        var x = $("#select1").val();

        $.ajax({
            type: "POST",
            url: "fetch_municipalities.php",
            // async: false,
            data:"level1="+x,
            success:function(data){
                // alert(data);

                $("#select2").html(data).multiselect(); 
            },
            error:function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
    });
</script>   

这是我的fetch_municipalities.php

if(isset($_POST['level1'])) {
    $post_lvl2 =  $_POST['level1'];
    // die($_POST['level1']);
    // echo $_POST['level1'];

    $sql = 'SELECT * FROM L_Areas WHERE CentralAreaID = ' . $post_lvl2;
    $query = mysqli_query($db, $sql);

   $filter_list_lvl2 = '';

    while($row = $query->fetch_assoc()){ 

        $name_lvl2 = $row['AreaName'] ;            
        $id_lvl2 = $row['AreaID'] ;
        $central_lvl2= $row['CentralAreaID'] ;

        // the option tags
        $filter_list_lvl2 .=  '<option value="' . $id_lvl2 . '">' . $name_lvl2 . '</option>';
    } 

    echo $filter_list_lvl2; 
}

所以如果我 select city1 我第一次得到 city1 的所有城市,但是当我 select 另一个城市(例如 city2)时,城市不会改变(仍然来自 city1)。

我该如何解决这个问题?

我想我明白了。而不是:

data:"level1="+x

使用:

data: { level1 : x }

数据必须是对象,不能是字符串。

(另外,使用 var x = $(this).val() 以避免在 DOM 中获取两次 #select1。)

试试这个:

$("#select2").multiselect();

$("#select1").on("change", function() {
        $.ajax({
            type: "POST",
            url: "fetch_municipalities.php",
            data: { level1 : $(this).val() },
            success:function(data){
                $("#select2").html(data).multiselect('refresh'); 
            },
            error:function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
    });