jquery 如何使用 AJAX 在PHP中POST两个参数

tzxcd3kk  于 2023-01-01  发布在  jQuery
关注(0)|答案(2)|浏览(96)

我想给getStuName()函数传递两个参数,但是发现有错误,谁能帮我语法?

<script language="javascript">        
    function getStuName1(val, val1) {
        if(val!=''){
            $.ajax({
            type: "POST",
            url: "get_stuname1.php",
            data:'yr='+val+'&classname='+val1,
            success: function(data){
            $("#stu-list1").html(data);
            }
            });
            alert(data);
        }else{
            document.getElementById('stuname').options.length=1;
            document.getElementById('stuname').options[0].text='Please select';
        }
    } //end function
</script>

<select style="font-size: 18px;" name="yr" onChange="getStuName1(this.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(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>

get_stuname1.php的内容

<?php
    require_once("connMysql.php");
    $sql_stu ="SELECT * FROM stu_hist WHERE enabled='1' AND sch_yr = '" . $_POST['yr'] . "' AND classname = '" .    $_POST['classname'] . "' ORDER BY classno";
    $stu_result = mysqli_query($db_link,$sql_stu);
    while($rs = mysqli_fetch_array($stu_result, MYSQLI_ASSOC)) {
?>
    <option value="<?php echo $rs["stu_name"]; ?>"> <?php echo $rs["stu_name"]; ?></option>
<?php
}
?>

我想获取yr和classname并将它们传递给函数getStuName1,但无法显示学生姓名

lzfw57am

lzfw57am1#

要确保两个select菜单中的值(或者全部,如果有更多)在ajax请求中使用一个方法,你可能会考虑使用一个全局变量,当选择菜单触发change事件时,你会填充这个全局变量。我们感兴趣的是填充时的有效长度,因为我们可以决定仅在两个/所有选择菜单都已更改时才发送AJAX请求。这一切都是在没有jQuery的情况下完成的,但是fetch代码可以很容易地用合适的jQuery代码替换。

// populate this with select name & value pairs
let args={};

// a function to process the response from the server
let callback=(r)=>{
  document.getElementById('stu-list1').innerHTML=r;
}

// delegated event handler bound to the document
document.addEventListener('change',e=>{
  if( e.target instanceof HTMLSelectElement && e.target.classList.contains('required') ){
    
    // store this select menu name/value
    args[ e.target.name ]=e.target.value;
    
    // if BOTH (all) select menus are populated, do the AJAX request
    if( Object.keys( args ).length==document.querySelectorAll('select.required').length ){
      
      let payload=Object.keys( args ).map(name=>{
        return [ name, args[name] ].join('=')
      }).join('&');
      
      fetch( 'get_stuname1.php', { method:'post', body:payload } )
        .then(r=>r.text())
        .then(callback)
        .catch(alert)
    }
  }
});
<select name="yr" class='required'>
  <option selected hidden disabled>please select...
  <option>2021-2022
  <option>2022-2023
  <option>2023-2024
  <option>2024-2025
  <option>2025-2026
  <option>2026-2027
</select>

<select name="classname" id="class-list" class="demoInputBox required">
  <option selected hidden disabled>please select...
  <option>geronimo
  <option>horatio
  <option>mimosa
</select>

<div id='stu-list1'></div>
7uzetpgm

7uzetpgm2#

由于您要向getStuName 1函数传递两个参数,因此不要使用onChange(对于one选择框中的更改),建议您有一个按钮,当twotwo都被选中时,该按钮可以提交two所选的值(“确认提交”X1 M2 N1 X是优选的选择,因为通常一个人需要在实际提交之前确定他/她的所有选择框都被正确地选中,并且实际上如果仅选择了选择框中的一个则没有触发 AJAX 的点)
因此
1.确保两个选择框都有一个唯一的id(因此为yr选择框添加id=“yr”)
1.添加例如触发传递两个选择框的所选值的按钮,例如:

<input type=button value="Confirm" onclick="javascript:trigger1();">

以及

<script>
function trigger1() {
  var e = document.getElementById("yr");
  var value1 = e.value;

  var e2 = document.getElementById("class-list");
  var value2 = e2.value;

  getStuName1(value1, value2);

    }
</script>

因此,将代码更改为

<script language="javascript">        
function getStuName1(val, val1) {
if(val!=''){
$.ajax({
type: "POST",
url: "get_stuname1.php",
data:'yr='+val+'&classname='+val1,
success: function(data){
$("#stu-list1").html(data);
}
});
alert(data);
}else{
document.getElementById('stuname').options.length=1;
document.getElementById('stuname').options[0].text='Please select';
}
} //end function
</script>

<select style="font-size: 18px;" name="yr" id="yr">
<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"  >
<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>

<input type=button value="Confirm" onclick="javascript:trigger1();">

<script>
function trigger1() {
  var e = document.getElementById("yr");
  var value1 = e.value;

  var e2 = document.getElementById("class-list");
  var value2 = e2.value;

  getStuName1(value1, value2);

    }
</script>

[补充要点]
最后,请修改你的PHP脚本,使用参数化的预准备语句,以抵御SQL注入。你可以参考以下内容:
对于Mysqli:
https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
对于PDO
https://www.php.net/manual/en/pdo.prepare.php

相关问题