我刚刚遇到一个问题,尝试使用jQuery,Ajax和php填充两个下拉选择菜单。即使从下拉菜单中选择了其他选项,代码也会继续从数据库加载相同的值。这是代码的片段
test.html
<html>
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<body>
<form method="post" action="self.php">
<table>
<tr>
<td><div><label><strong>class:</strong></label></div></td>
<td><div><select name="class_id" id="class_id_0">
<option value="" selected>Select a Class</option>
<option value="1">Nursery</option>
<option value="2">Primary</option>
<option value="3">Secondary</option>
</select></div></td>
</tr>
<tr>
<td><div><label><strong>Sub-Class:</strong></label></div></td>
<td><div><select name="sub_class_id" id="sub_class_id_0">
<option value="">Select a Sub - Class</option>
</select></div></td>
</tr>
<tr>
<td><div><label><strong>Subject:</strong></label></div></td>
<td><div><select name="subject_id" id="subject_id_0">
<option value="">Select a Subject</option>
</select></div></td>
</tr>
</table>
</form>
</body>
</html>
JQuery的
<script>
(function($){
$("#class_id_0").change(function(){
var str = "";
var type = "sub_class";
$( "#class_id_0 option:selected" ).each(function() {
str += $( this ).val() + " ";
});
$.post( "data.php",{class_id:parseInt(str),type:""+type}).done(function(data){
alert(str);
alert( "Data Loaded:" + data );
$("#sub_class_id_0").html(data);
});
});
$("#sub_class_id_0").change(function(){
var str = "";
var type = "subject";
$( "#sub_class_id_0 option:selected" ).each(function() {
str += $( this ).val() + " ";
});
$.post( "data.php",{sub_class_id:parseInt(str),type:""+type}).done(function(data){
alert(str);
alert( "Data Loaded:" + data );
$("#subject_id_0").html(data);
});
});
})(jQuery);
</script>
data.php
<?php
$options = "";
$query = "";
$type = isset($_REQUEST["type"]);
switch($type){
case "sub_class":
$sub_class_id = intval($_REQUEST["sub_class_id"]);
$default_value = "";
$default_text = "Select a Sub - Class";
$options = "<option value='".$default_value."'>".$default_text."</option>";
if($class_id == "" || $class_id == 0)
{
$options = "<option value = >Select a Class First</option>";
}
$con = mysql_connect('localhost', 'root', '');
$database = mysql_select_db('admin_glisten');
$sql="SELECT sub_class_id,sub_class FROM sub_class WHERE class_id = '".$class_id."'";
$result = mysql_query($sql);
if (!$result) {
die("Query failed: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) {
$options .= "<option value='".$row['sub_class_id']."'>".$row['sub_class']."</option>";
}
echo $options;
mysql_close($con);
break;
case "subject":
$sub_class_id = intval($_REQUEST["sub_class_id"]);
$default_value = "";
$default_text = "Select a Subject";
$options = "<option value='".$default_value."'>".$default_text."</option>";
if($sub_class_id == "" || $sub_class_id == 0)
{
$options = "<option value = >Select a Sub - Class First</option>";
}
$con = mysql_connect('localhost', 'root', '');
$database = mysql_select_db('admin_glisten');
$sql="SELECT subject_scheduler.subject_id,subject.subject_id,subject.name FROM subject_scheduler INNER JOIN subject ON subject_scheduler.subject_id=subject.subject_id WHERE sub_class_id = '".$sub_class_id."'";
$result = mysql_query($sql);
if (!$result) {
die("Query failed: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) {
$options .= "<option value='".$row['subject_id']."'>".$row['name']."</option>";
}
echo $options;
mysql_close($con);
break;
default:
}
?>
PS 别担心我的不安全代码只是试图让它工作。任何帮助将不胜感激,因为我已经在过去几个小时了。
答案 0 :(得分:3)
您正在使用$ class_id变量来查询数据库,但$ class_id始终是相同的。原因如下:
PHP代码的第4行
$class_id = intval(isset($_REQUEST["class_id"]));
Intval返回一个整数,这很好,但是,你也调用了isset,它返回一个布尔值。在大多数情况下,isset结果为true,然后intval结果为1。
所以实际上你的查询总是:
SELECT sub_class_id,sub_class FROM sub_class WHERE class_id = '1';