我面临的问题是,我已经创建了2个表一个是parent_category和另一个是child_category。我在选择选项下拉中获取父类别。我的目标是从两个表中具有相同父id的子表中获取子类别。我已经尝试过很多次了,但是当我选择父类别时,它会在子选择选项下拉菜单中多次显示相同的名称类别。
这是我的代码。
index . php
<div>
<select id="parent_category">
<?php
$select = "select * from categories";
$run = mysqli_query($con, $select);
while($row = mysqli_fetch_array($run)){
echo "<option value='".$row['id']."'>".$row['name']."</option>";
}
?>
</select>
<br><br>
<select id="child_category">
</select>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
$('#parent_category').on('change', function() {
let id = $(this).find(':selected').data('id');
alert(id);
$.ajax({
url: 'data.php',
method: 'GET',
data: {
id: id,
},
success: function(data) {
$("#child_category").html(data);
}
});
});
});
</script>
data.php
$con = mysqli_connect("localhost", "root", "", "nilam-ghar");
if(isset($_GET["id"])){
$output = "";
$id = $_GET['id'];
$get = "SELECT * FROM child_category WHERE parent_cat_id='$id'";
$run = mysqli_query($con, $get);
while($row = mysqli_fetch_array($run)){
echo $output .= '
<option>'.$row["name"].'</option>;
';
}
echo $output;
}
数据库表
parent_category:
id(int) date(date) name(text)
child_category:
id()int date(date) parent_cat_id(int) name(text)
**Note:** data exits in both table. in child category, parent id also exist.
刚刚检查了你的代码,在这里发现了问题let id = $(this).find(':selected').**data('id');**
data('id')这将在你像这样分配<option data-id="1">OptionA</option>
时使用在你的情况下你已经使用了选项的value属性所以
let id = $(this).find(':selected').val();
你将得到这样的值
你也可以检查下面的代码片段,有更清晰的视野。
$(document).ready(function() {
$('#parent_category').on('change', function() {
let id = $(this).find(':selected').val();
let option = $(this).find(':selected').text();
console.log('ID => '+id+' Option => '+option);
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="parent_category">
<option value="">Select</option>
<option value="1">OptionA</option>
<option value="2">OptionB</option>
<option value="3">OptionC</option>
</select>
您的代码中似乎有两件事是错误的。
首先,在你的JavaScript中,你得到data-id
属性来进行查询,但是你的<option>
s没有这个属性。所以,试着改变
let id = $(this).find(':selected').data('id');
let id = $(this).find(':selected').val();
同样,在data.php中,似乎您回显了两次输出,所以尝试以下操作:
// (...)
while($row = mysqli_fetch_array($run)){
// removed 'echo' in the line below
$output .= '
<option>'.$row["name"].'</option>;
';
}
// (...)