You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ajax在PHP中传递两个参数调用函数获取学生姓名失败的问题求助

使用Ajax在PHP中传递两个参数调用函数获取学生姓名失败的问题求助

看起来你遇到的核心问题是没有在调用getStuName1函数时传递两个必要的参数,另外还有几处小细节可能导致功能异常,我帮你梳理并修正一下:

1. 函数调用时未传递两个参数

你的两个<select>标签的onChange事件里,都只传递了当前控件的value,但函数需要yr和classname两个参数。你需要在触发事件时,同时获取另一个select的值并传递进去:

修改后的年份选择框:

<select style="font-size: 18px;" name="yr" onChange="getStuName1(this.value, document.getElementById('class-list').value);">
  <option value="2021-2022">2021-2022</option>
  <option value="2022-2023">2022-2023</option>
  <option value="2023-2024">2023-2024</option>
  <option value="2024-2025">2024-2025</option>
  <option value="2025-2026">2025-2026</option>
  <option value="2026-2027">2026-2027</option>
</select>

修改后的班级选择框:

<select style="font-size: 18px;" name="classname" id="class-list" class="demoInputBox" onChange="getStuName1(document.querySelector('select[name=yr]').value, this.value);">
  <option value="" selected>please select</option>
  <?php
  $sql="SELECT classname FROM class";
  $class_result = mysqli_query($db_link,$sql);
  while($rs = mysqli_fetch_array($class_result, MYSQLI_ASSOC)) {
  ?>
  <option value="<?php echo $rs["classname"]; ?>"><?php echo $rs["classname"]; ?></option>
  <?php
  }
  ?>
</select>

2. Ajax回调外访问data变量的错误

你在$.ajax外面写了alert(data);,但data是success回调函数的局部变量,在外部无法访问,这会导致控制台报错。如果需要查看返回的数据,应该把alert放到success回调里面:

<script language="javascript">
function getStuName1(val, val1) {
  // 同时判断两个参数都不为空,避免无效请求
  if(val!='' && val1!=''){
    $.ajax({
      type: "POST",
      url: "get_stuname1.php",
      data:'yr='+val+'&classname='+val1,
      success: function(data){
        $("#stu-list1").html(data);
        alert(data); // 移到回调内部才能正确访问data
      }
    });
  }else{
    // 这里注意原代码操作的是stuname,但目标容器是stu-list1,统一调整为目标容器
    $("#stu-list1").html('<option value="">Please select</option>');
  }
} //end function
</script>

3. PHP代码的SQL注入风险(重要)

你的PHP代码直接把$_POST参数拼接到SQL里,存在严重的SQL注入风险,建议改用预处理语句执行查询,同时对输出内容做转义避免XSS攻击:

<?php
require_once("connMysql.php");
// 使用预处理语句防止SQL注入
$stmt = $db_link->prepare("SELECT * FROM stu_hist WHERE enabled='1' AND sch_yr = ? AND classname = ? ORDER BY classno");
$stmt->bind_param("ss", $_POST['yr'], $_POST['classname']);
$stmt->execute();
$stu_result = $stmt->get_result();
while($rs = mysqli_fetch_array($stu_result, MYSQLI_ASSOC)) {
?>
<option value="<?php echo htmlspecialchars($rs["stu_name"]); ?>"> <?php echo htmlspecialchars($rs["stu_name"]); ?></option>
<?php
}
$stmt->close();
?>

按照上面的修改,你应该就能正常传递两个参数并获取到学生姓名列表了。

备注:内容来源于stack exchange,提问作者Jimmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:37:47