【问题标题】:How do I get the form data in Codeigniter controller using ajax?如何使用 ajax 在 Codeigniter 控制器中获取表单数据?
【发布时间】:2019-09-27 07:33:52
【问题描述】:

http://zivite.com/salary/

大家好,请访问上面提到的链接。 无论何时从下拉列表中选择名称,都会列出与该特定名称相关的所有数据。

在循环数据中,我在 tr 和提交按钮周围添加了表单,并添加了一些额外的字段,如出勤、贷款、费率等。每当点击特定人的提交按钮时。它应该存储在我的称为工资表的数据库表中。

现在我的问题是当我们点击提交按钮时没有获取模型中的数据,

如果您检查它,您会看到数组正在那里创建,但提交的表单中没有数据 请参阅下面的此图片链接 https://ibb.co/h11SgMV

//查看

<?php include "template/header.php"; ?><!-- Start Page content -->

    <div class="content">
        <div class="container-fluid">
            <div class="card-box">
                <form action="%3C?php%20echo%20base_url('con_employee/employeeSearch');%20?%3E" class="form-inline" method="post">
                    <div class="form-group" style="padding-right:10px; width:100%;">
                        <select class="custom-select" id="empDesignation" name="empDesignation">
                            <option selected>
                                Designation
                            </option><?php foreach($categories as $category){ ?>
                            <option value="<?php echo $category['cat_id']; ?>">
                                <?php echo $category['cat_name']; ?>
                            </option><?php } ?>
                        </select>
                    </div>
                </form><br>
                <div class="row">
                    <table class="table table-hover table-centered m-0 table-bordered">
                        <thead>
                            <tr>
                                <th>Name</th>
                                <th>Designation</th>
                                <th>Account Number</th>
                                <th>Attendance</th>
                                <th>Rate</th>
                                <th>Loan</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody id="salaryData"></tbody>
                    </table>
                </div>
            </div>
        </div><!-- container -->
    </div><!-- content -->
    <!-- end row -->
    <script>
    $(function() {


       $('#empDesignation').change(function() {
           var user_designation = $(this).val();
           if (user_designation == '') {
               $('#empName').prop('disabled', true);
           } else {
               $('#empName').prop('disabled', false);
               $.ajax({
                   url: "<?php echo site_url(); ?>con_salary/add_salary_for_employee",
                   type: "POST",
                   data: {
                       'user_designation': user_designation
                   },
                   dataType: 'json',
                   success: function(data) {

                       var html = '';
                       var i;
                       for (i = 0; i < data.length; i++) {
                           html += '<tr>' +
                               '<form class="" id="myform">' +
                               '<td>' + data[i].emp_name + ' <\/td>' +
                               '<td>' + data[i].cat_name + '<\/td>' +
                               '<td>' + data[i].emp_account_number + '<\/td>' +
                               '<td>' +
                               '<input type="text" class="form-control"  name="attendance" placeholder="Attendance" required>' +
                               '<\/td>' +
                               '<td>1<\/td>' +
                               '<td>' +
                               '<input type="text" class="form-control"  name="loan" placeholder="Loan" required>' +
                               '<\/td>' +
                               '<td>' +
                               '<a href="javascript:;" class="btn btn-primary item-edit" id="btnSave">Submit<\/a>' +
                               '<\/td>' +
                               '<\/form>' +
                               '<\/tr>';
                       }
                       $('#salaryData').html(html);

                       // $('#salaryData').html(data);
                   },
                   error: function() {
                       alert('No Data');
                   }

               });

           }
       });
    });


    //insert data to salary table
       $('#salaryData').on('click', '.item-edit', function() {
           $('#myform').attr('action', '<?php echo base_url() ?>con_salary/addSalary');

           var url = $('#myform').attr('action');
           var data = $('#myform').serialize();
           var attendance = $('input[name=attendance]');
           var loan = $('input[name=loan]');    


               $.ajax({
                   type: 'ajax',
                   method: 'POST',
                   url: url,
                   data: data,
                   async: false,
                   dataType: 'json',
                   success: function(response) {

                   },
                   error: function() {

                   }
               });

       });


    </script> <?php include "template/footer.php"; ?>

// 控制器

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Con_salary extends CI_Controller 
{

public function __construct(){
    parent:: __construct(); 


    $this->load->model('queries_salary');       
}


public function index()
{   $data['categories'] = $this->queries_salary->fetchCategory();
    $this->load->view('employee_salary_view',$data);
}


public function add_salary_for_employee()
{
   $designation_id=$this->input->post('user_designation');
    $users = $this->queries_salary->fetchEmployeeforsalary($designation_id);

    echo json_encode($users);


}

public function addSalary()
{
    $result = $this->queries_salary->addSalary();


    // $msg['success']=false;
    // $msg['type']='add';

    // if($result){
    //     $msg['success']=true;
    // }

    // echo json_encode($msg);

}


//end
}
?>

// 型号

<?php 

class Queries_salary extends CI_Model
{

    public function fetchCategory()
    {
        $query= $this->db->get('category');
        return $query->result_array();
    }

    public function fetchEmployeeforsalary($designation_id)
{
    $this->db->where('emp_designation_id',$designation_id);
    $this->db->join('category','employee.emp_designation_id = category.cat_id');
    $query=$this->db->get('employee');


    if($query->num_rows()>0){
        return $query->result();
    }
    else{
        return false;
    }

    // $this->db->where('emp_designation_id',$designation_id);
    // $query=$this->db->get('employee');


}

public function addSalary()
{
    $field = array(
        'salary_attendance'=>$this->input->post('attendance'),
        'salary_loan'=>$this->input->post('loan')
    ); 


    print_r($field);
    exit();

    // $this->db->insert('salary',$field );
    // if($this->db->affected_rows()>0)
    // {
    //     return true;
    // }
    // else{
    //     return false;
    // }



}



//end
}?>

【问题讨论】:

  • 您提交表单时的请求表单数据是什么?表格是否在那里正确序列化? (如果使用 chrome,只需转到开发工具中的请求头并一直滚动到底部)

标签: json ajax forms codeigniter


【解决方案1】:

表单不允许是 table、tbody 或 tr HTML 元素的子元素。 如果尝试放一个,往往会导致浏览器将表单移动到它出现在表格之后。因此,在您的情况下,表单会导致空数据。

在这里,我稍微调整了您的代码,它将为您工作。

for (i = 0; i < data.length; i++) {
   html += '<tr class="user_data" >' +
       '<td>' + data[i].emp_name + ' <\/td>' +
       '<td>' + data[i].cat_name + '<\/td>' +
       '<td>' + data[i].emp_account_number + '<\/td>' +
       '<td>' +
       '<input type="text" class="form-control attendance"  name="attendance" placeholder="Attendance" required>' +
       '<\/td>' +
       '<td>1<\/td>' +
       '<td>' +
       '<input type="text" class="form-control loan"  name="loan" placeholder="Loan" required>' +
       '<\/td>' +
       '<td>' +
       '<a href="javascript:;" class="btn btn-primary item-edit" id="btnSave">Submit<\/a>' +
       '<\/td>' +                       
       '<\/tr>';
}

底部脚本

$('#salaryData').on('click', '.item-edit', function() {

   var url = '<?php echo base_url() ?>con_salary/add_salary_for_employee';
   var current_row = $(this).closest('.user_data');                   
   var data = { attendance: current_row.find('.attendance').val(), loan: current_row.find('.loan').val() };

   $.ajax({
       type: 'ajax',
       method: 'POST',
       url: url,
       data: data,
       async: false,
       dataType: 'json',
       success: function(response) {

       },
       error: function() {

       }
   });

});

一个重要提示是,如果您使用单一表单并使用具有相同名称的相同类型的输入,请将其用作数组。

例如:name="loan[]"

【讨论】:

  • 感谢您的帮助。我已使用此脚本,但没有任何反应,即使操作无效。我应该把表单的动作标签放在哪里?在脚本或 html 中?以及不触发控制器。
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 2015-04-30
  • 2017-01-20
相关资源
最近更新 更多