如何使用jQuery,PHP和MySQL动态填充依赖选择菜单


How to populate dependant select menus dynamically using jQuery, PHP and MySQL?

我在这里搜索了很多关于这个主题的内容。但我找不到解决我的问题的方法。如果您能帮助我,我将不胜感激,这是我正在从事的一个学校项目。

我有一个带有表格("Main_table")和包括"扇区"和"sub_sector"的列的数据库。我想要两个选择框,第一个将在"扇区"列中加载数据库中的所有记录,第二个将在"sub_sector"列中加载数据库中的所有记录,具体取决于第一个选择框的选择值。(例如:如果我在第一个选择框中选择"塑料",则应使用扇区值等于"塑料"的sub_sector值更新第二个选择框)。

我已经设法从数据库中加载第一个选择框的选项值,但是当我单击任何选择时,它不会将任何选项加载到第二个选择框。您可以在下面找到代码。我没有在下面放"sector_options.php",因为它似乎工作得很好。

索引.html如下所示:

<script>
$(document).ready(function() { 
$('#filter_sector')
.load('/php/sector_options.php'); //This part works fine - uploads options to the first select box
$('#filter_sector').change(function() {
$('#filter_subsector').load('/php/subsector_options.php?filter_sector=' + $("#filter_sector").val()
} //This part does not work - no options on the second select box
);
});
</script>
<body>
<div id="sectors"><p>Sector:</p>
<select id="filter_sector" name="select_sector" multiple="multiple" size="5"> </select>    
</div> 
<div id="subsectors"><p>Sub Sector:</p>
<select id="filter_subsector" name="select_subsector" multiple="multiple" size="5"> <option value="" data-filter-type="" selected="selected">
-- Make a choice --</option>
</select> 
</div>      
</body>
</html>    

sector_options.php如下所示:

<?php
$link = mysqli_connect("*******", "*******","******","********") or die (mysql_error());
$query = "SELECT sector FROM Main_table ";
$result = mysqli_query($link, $query);
while($row = mysqli_fetch_assoc($result)) {
$options .= "<option value='"".$row['sector']."'">".$row['sector']."</option>'n  ";
}
echo $options;
?>

subsector_options.php如下所示:

<?php
$link = mysqli_connect("********", "*****,"*******", "********") or die (mysql_error());
$Sectors = $_REQUEST['filter_sector'];
$query = "SELECT sub_sector FROM Main_table WHERE sector='$Sectors'";
$result = mysqli_query($link, $query);
while($row = mysqli_fetch_assoc($result)) {$options .= "<option value='"".$row['sub_sector']."'">".$row['sub_sector']."</option>'n  ";
}
echo $options;
?>

为了完整起见,解决方案是:

  • 使用浏览器网络监视器检查 AJAX 操作的执行情况
  • 在浏览器标签中加载 AJAX 提取器脚本 - 在许多情况下,它们会在那里渲染得非常愉快,从而更容易调试它们
  • 返回 HTML 进行注入的 AJAX 脚本应返回该 HTML,而不是完整的 HTML 文档。