如何使用jQuery $ .post通过ajax将表单字段发布/发送回服务器 - javascript

大家好,我正在基于一些下拉菜单通过ajax显示表单。用户可以在一个下拉菜单中选择班级,而在另一个下拉菜单中选择科目,依次返回该班级的学生列表。

它以类似形式的格式格式化,允许用户输入学生已获得的科目分数。用户选择首选项后,表单将如下所示:
如何使用jQuery $ .post通过ajax将表单字段发布/发送回服务器 - javascript

我想单击保存按钮,并在用户输入分数后将其发送到数据库。我面临几个问题:

当score字段为空时(因为我添加了必填属性),它不会验证该字段为空,而是向负责插入记录的文件发送请求。
当请求到达负责插入记录(create_score.php)的文件时,就好像没有通过表单发送任何值。我知道这是因为我var_dump($_POST)并且它返回了array(0) { }

这是我用来返回文件的脚本:

$(document).ready(function() {
$('#subject_id').on('change', function(){
    var subject_id = $('#subject_id').val();
    var class_id = $('#class_id').val();
    var term = $('#term').val();

    if (subject_id != '' || class_id != '') {
      $.ajax({
        url:"includes/ajax/read_student_score_form.php",
        method:"post",
        data:{"subject":subject_id, "class":class_id, "term":term},
        dataType:"text",
        success:function(data){
          $("#result").html(data);
        }
      });
    } else {
      $("#result").html('');

    }   
}); 

$('#class_id').on('change', function(){
    var subject_id = $('#subject_id').val();
    var class_id = $('#class_id').val();
    var term = $('#term').val();

    if (subject_id != '' || class_id != '') {
      $.ajax({
        url:"includes/ajax/read_student_score_form.php",
        method:"post",
        data:{"subject":subject_id, "class":class_id, "term":term},
        dataType:"text",
        success:function(data){
          $("#result").html(data);
        }
      });
    } else {
      $("#result").html('');
    }   
});

$('#term').on('change', function() {
  /* Act on the event */
    var subject_id = $('#subject_id').val();
    var class_id = $('#class_id').val();
    var term = $('#term').val();

    if (subject_id != '' || class_id != '') {
        $.ajax({
          url:"includes/ajax/read_student_score_form.php",
          method:"post",
          data:{"subject":subject_id, "class":class_id, "term":term},
          dataType:"text",
          success:function(data){
            $("#result").html(data);
          }
        });
    } else {
      $("#result").html('');
    }   
}); 

单击提交时,这就是我如何构造代码以将值发布到负责插入记录的文件中的方式(create_score.php

$(document).on('click', '#savebtn', function(event) {
    event.preventDefault();

    // this is where I'm testing if the button is working
    alert("Button click");
    console.log("Button click for console");

    var form = $('#st_score_form');
    var formdata = form.serialize();

    $.post("includes/ajax/create_score.php", formdata)
    .done(function(data){
      $("#success").fadeIn('slow', function(){
        $("#success").html('<div class="alert alert-info alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true"><i class="glyphicon glyphicon-remove-circle"></i></button><b><i class="fa fa-check"></i>Alert! </b>'+data+'</div>');
      });    
    })
    .fail(function(data){
        $("#success").fadeIn('slow', function(){
             $("#success").html('<div class="alert alert-warning alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true"><i class="glyphicon glyphicon-remove-circle"></i></button><b><i class="fa fa-warning"></i>Alert! </b>'+data+'</div>');
         });
    });

});
$('body').append('<button id="#savebtn"></button>');

这就是我返回表单(read_student_score_form.php)的方式:

if (mysqli_num_rows($result) > 0) {
    # code...
    $output .= '<h4 align="center">Periodic Report</h4>';
    $output .= '<div class="table-responsive">

                    <table class="table table-bordered">
                        <tr>
                            <th scope="row" colspan="1">Subject</th>
                            <td colspan="5">'.$subject["subject_name"].'</td>

                            <th scope="row">Class</th>
                            <td>'.$class['class_name'].'</td>

                            <th scope="row">Period</th>
                            <td>'.$period.'</td>
                        </tr>';
        $output .= '</table>';
        $output .= '<table class="table table-bordered table-condensed table-responsive table-striped">
                        <thead>
                            <tr>
                                <th>Student</th>
                                <th>Score</th>
                                <th>Operations</th>
                            </tr>
                        </thead>';
            $output .= '<tbody>';
                while ($row = mysqli_fetch_array($result)) {
                    # code...
                    $output .= '<form action="#" method="post" id="st_score_form">';
                        // unseen fields values that will be send
                        $output .= '<tr style="display: none;">';
                            $output .= '<td><input type="text" name="student_id" value="'.$row['student_id'].'"></td>';
                            $output .= '<td><input type="text" name="subject_id" value="'.$subject_id.'"></td>';
                            $output .= '<td><input type="text" name="class_id" value="'.$class_id.'"></td>';
                            $output .= '<td><input type="text" name="term" value="'.$term.'"></td>';
                        $output .= '</tr>';
                        // -- end of unseen fields

                        $output .= '<tr>';
                            $output .= '<td>'.$row["first_name"]." ".substr($row["middle_name"], 0, 1).". ".$row["surname"].'</td>';
                            $output .= '<div class="form-group">';
                                $output .= '<td><input type="number" min="59" max="100"  name="score" class="form-control" required="required"></td>';
                                $output .= '<td><input type="submit" name="savebtn" id="savebtn" value="Save" class="btn btn-info form-control"></td>';
                            $output .= '</div>';

                        $output .= '</tr>';
                    $output .= '</form>';
                }
            $output .= '</tbody>';
        $output .= '</table>';
    $output .= '</div>';            
    echo $output;
} else {
    echo "Data not found";
}

负责插入记录的文件内容(create_score.php

if (isset($_POST)){
    // just testing to see values posted
    echo var_dump($_POST);
}

我愿意就如何进行这项工作提供反馈和建议。谢谢!!!

更新这就是我现在显示表单的方式

$output .= '<form action="#" method="post" id="st_score_form">';
                    while ($row = mysqli_fetch_array($result)) {
                        # code...
                            // unseen fields values that will be send
                            $output .= '<tr style="display: none;">';
                                $output .= '<td><input type="text" id="student_id" name="student_id" value="'.$row['student_id'].'"></td>';
                                $output .= '<td><input type="text" name="subject_id" value="'.$subject_id.'"></td>';
                                $output .= '<td><input type="text" name="class_id" value="'.$class_id.'"></td>';
                                $output .= '<td><input type="text" name="term" value="'.$term.'"></td>';
                            $output .= '</tr>';
                            // -- end of unseen fields

                            $output .= '<tr>';
                                $output .= '<td>'.$row["first_name"]." ".substr($row["middle_name"], 0, 1).". ".$row["surname"].'</td>';
                                $output .= '<div class="form-group">';
                                    $output .= '<td><input type="number" min="59" max="100"  name="score" class="form-control" required="required"></td>';
                                    $output .= '<td><input type="submit" name="savebtn" id="savebtn" value="Save" class="btn btn-info form-control"></td>';
                                $output .= '</div>';

                            $output .= '</tr>';
                    }
                $output .= '</form>';

参考方案

您有多个具有相同ID的元素,具体来说

id="savebtn"

第一个附加了jQuery,第二个附加了导线,您也尝试将其添加..可能会很杂乱,尝试隔离或更改按钮引用或类,尝试切换到类和沟渠ID是一劳永逸的,我很久以前就这样做了,我的生活变得更好了:)

另外,作为您的问题编号
1)尝试以与其他事件相同的方式添加支票

$(document).on('click', '#savebtn', function(event) {
    event.preventDefault();
    var form = $('#st_score_form');
    var formdata = form.serialize();
    // check for value if not empty
    var subject_id = $('#subject_id').val();
    var class_id = $('#class_id').val();
    var term = $('#term').val();

    if (subject_id != '' || class_id != '') {
      $.post("includes/ajax/create_score.php", formdata)
      .done(function(data){
        $("#success").fadeIn('slow', function(){
          $("#success").html('<div class="alert alert-info alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true"><i class="glyphicon glyphicon-remove-circle"></i></button><b><i class="fa fa-check"></i>Alert! </b>'+data+'</div>');
        });    
      })
      .fail(function(data){
          $("#success").fadeIn('slow', function(){
               $("#success").html('<div class="alert alert-warning alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true"><i class="glyphicon glyphicon-remove-circle"></i></button><b><i class="fa fa-warning"></i>Alert! </b>'+data+'</div>');
           });
      });
    }
});

为您的问题编号

2)当您从read_student_score_form.php页面获取结果时,请尝试在浏览器控制台中运行此命令,以查看是否有任何结果,这是在尝试将其发送到服务器之前,

var form = $('#st_score_form');
var formdata = form.serialize();

运行它,然后在这里获取您的结果,以便我们可以继续解决此问题,

更新:

您错了循环...在php中查看您的一会儿,那会渲染多个<form action="#" method="post" id="st_score_form">,这是错误的..在此之前将其移动,如下所示:

<?php
    $output .= '<form action="#" method="post" id="st_score_form">';
    while ($row = mysqli_fetch_array($result)) {

    } // end while
    $output .= '</form>';

使用php重新加载内容 - javascript

在对网站进行编程时,我以前使用过此代码,它可以完美工作,但是现在当我想使用一些Flash部件时,每次单击链接时,它都会重新加载所有网站。源代码: <!DOCTYPE html> <html> <head> <title>Hot King Staff</title> <meta charset=…

用jQuery填充模式形式 - javascript

我正在将订单表从数据库绘制到datatables(jquery插件)中。我要在每笔最后一笔交易或每笔交易中增加付款。问题是,如何获取单击添加付款按钮以添加付款的行的订单ID。其次,当点击addpayment时,它会弹出一个带有字段或订单号的模态表单。我想用在td中找到的订单ID填充该字段,并使其不可编辑或隐藏,但在提交模态表单时将其发布到服务器。表格和模式表…

保留文本区域的数据或值,然后选择输入 - javascript

通过$ _POST提交表单时,输入文件值仍然保留。像这样: if($_POST){ $error = false; if(!$post['price']){ $error = true; $error_note['price'] = "*Should not be empty"; } if($err…

带有AJAX和DOM处理API的下拉菜单 - javascript

我从API获取数据,但未在我的下拉菜单中显示。如果我用?act=showprovince回显,结果就在那里。example.html<head> <link rel="stylesheet" type="text/css" href="css/normalize.css"> …

尽管刷新,jQuery格式仍未应用于Ajax数据 - javascript

我正在通过GET响应消息从服务器(php文件)的可折叠内部加载列表视图。但是,尽管刷新了jQuery元素,但jQuery格式并未应用于添加的HTML。我的页面在这里:http://i.cs.hku.hk/~hsbashir/Project_Work/events/events.htmlHTML代码(仅相关代码)<script> lastRecor…