简体   繁体   English

我想使用ajax post从视图传递codeigniter中的数据,在控制器中处理该数据,然后将结果数组发送回视图

[英]I want to pass data in codeigniter from view using ajax post, process that data in controller and send back the result array to view

I have searched the whole WWW but get nothing helpful. 我搜索了整个WWW,但没有任何帮助。 Any Solution will be appreciated. 任何解决方案将不胜感激。 thanks in advance 提前致谢

MY HTML 我的HTML

 <div class="row">

Either the form tag needed in my case or not 是否需要我的表单标签

        <form>
        <div class="form-group">
        <label for="date" class="col-12 col-md-2 control-label"><?php echo 'Date';?> 
        </label>
        <div class="col-12 col-md-3">
        <input type="text" class="datepicker form-control" name="date" id="date">
        </div>
        </div>

Here I am getting the data from my database 在这里,我从数据库中获取数据

<div class="form-group">
        <label for="class_id" class="col-12 col-md-2 control-label"><?php echo 
         get_phrase('Select Class');?></label>
         <div class="col-12 col-md-3">
         <select name="class_id" class="form-control" id="class_id" onchange="return get_attendance()" >
         <option value=""><?php echo get_phrase('select class');?></option>
         <?php 
         $classes = $this->db->get('class')->result_array();
            foreach($classes as $row):?>
               <option value="<?php echo $row['class_id'];?>"><?php echo $row['name'];?></option>
          <?php endforeach; ?>
          </select>
          </div>
         </div>
        </form>
    </div>

I am using datatable class for exporting and printing 我正在使用数据表类进行导出和打印

    <table class="table table-bordered datatable" id="table_export">
        <thead>
             <tr>
                 <th>#</th>
                 <th><div><?php echo get_phrase('Status');?></div></th>
                 <th><div><?php echo get_phrase('Student Name');?></div></th>
                 <th><div><?php echo get_phrase('Class Name');?></div></th>
                 <th><div><?php echo get_phrase('Date');?></div></th>
                 <th><div><?php echo get_phrase('options');?></div></th>
             </tr>
         </thead>
         <tbody>
              <?php
                  $count = 1;
                  foreach($attendance as $row):?>

$attendance is recieved from the controller in $this->load->view('backend/index', $page_data); 从控制器在$ this-> load-> view('backend / index',$ page_data)中接收$ attendance;

<tr>
                          <td><?php echo $count++;?></td>
                          <td><?php echo $row['status'];?></td>
                          <td><?php echo $row['student_id'];?></td>
                          <td><?php echo $row['class_id'];?></td>
                          <td><?php echo $row['date'];?></td>
                       </tr>
                  <?php endforeach; ?>
           </tbody>
     </table>

MY JavaScript 我的JavaScript

The script below alert() the class_id and date but do not pass anything to the controller function alert()下面的脚本是class_id和date,但不会将任何内容传递给控制器​​函数

<script type="text/javascript">
    function get_attendance() {

            var class_id = $('#class_id').val();
            var date = $('#date').val();

            $.ajax({
                type: "post",
                dataType:"json",
                data: {"class_id": class_id, "date": date},
                url: '<?php echo base_url();?>index.php?admin/manage_attendance',
                success: function (data) {

                }
            });
}


</script>

My Controller 我的控制器

If I give static value to $date and $class_id as $date = '04-04-2018'; $class_id = 2; 如果我给$date$class_id静态值作为$date = '04-04-2018'; $class_id = 2; $date = '04-04-2018'; $class_id = 2; inside manage_attendance() below it works but using $this->input->post() do nothing: 在下面的manage_attendance()内部可以正常工作,但是使用$this->input->post()却无济于事:

function manage_attendance()
    {
        if($this->session->userdata('admin_login')!=1)
            redirect(base_url() , 'refresh');


            $date = $this->input->post('date');
            $class_id = $this->input->post('class_id');

        $page_data['attendance']= $this->db->get_where('attendance', array('class_id' => $class_id , 'date' => $date))->result_array();

        $page_data['page_name']  =  'manage_attendance';
        $page_data['page_title'] =  get_phrase('manage_daily_attendance');
        $this->load->view('backend/index', $page_data);
    }

Try to change 尝试改变

url: '<?php echo base_url();?>index.php?admin/manage_attendance' 

to

url: '<?php echo base_url();?>index.php/admin/manage_attendance',

I can get the same result by coding as following but I do not prefer that method/logic I want something as I have posted above 我可以通过以下代码进行编码来获得相同的结果,但我不喜欢我想要的方法/逻辑,如我上面所述

HTML 的HTML

<div class="form-group">
        <label for="class_id" class="col-12 col-md-2 control-label"><?php echo 
         get_phrase('Select Class');?></label>
         <div class="col-12 col-md-3">
         <select name="class_id" class="form-control" id="class_id" onchange="return get_attendance()" >
         <option value=""><?php echo get_phrase('select class');?></option>
         <?php 
         $classes = $this->db->get('class')->result_array();
            foreach($classes as $row):?>
               <option value="<?php echo $row['class_id'];?>"><?php echo $row['name'];?></option>
          <?php endforeach; ?>
          </select>
          </div>
         </div>
        </form>
    </div>

<table class="table table-bordered datatable" id="table_export">
        <thead>
             <tr>
                 <th>#</th>
                 <th><div><?php echo get_phrase('Status');?></div></th>
                 <th><div><?php echo get_phrase('Student Name');?></div></th>
                 <th><div><?php echo get_phrase('Class Name');?></div></th>
                 <th><div><?php echo get_phrase('Date');?></div></th>
             </tr>
         </thead>
         <tbody id="putdatahere">
         </tbody>
</table>

JavaScript 的JavaScript

<script type="text/javascript">

    function get_attendance() {
        var e = document.getElementById("class_id");
        var class_id = e[e.selectedIndex].value;
        var date = $('#date').val();

        $.ajax({
            url: '<?php echo base_url();?>index.php?admin/manage_attendance/'+ date +'/' + class_id,
            success: function(response)
            {
                jQuery('#putdatahere').html(response);
               }
        });

    }
</script>

CodeIgniter Controller CodeIgniter控制器

function manage_attendance($date, $class_id){
      $query = $this->db->get_where('attendance', array('class_id' => $class_id , 'date' => $date))->result_array();

       if($query){
                        $html_return = "";
                        foreach ($query as $attendance) {
                            $html_return .="<tr><td>"; 
                            $html_return .= $attendance['status']; //further Proccessing here e.g if $attendance['status'] == 0 echo absent otherwise present
                            $html_return .="</td><td>";
                            $html_return .= $attendance['student_id']); //further Proccessing here e.g get student name from its student_id
                            $html_return .="</td><td>";
                            $html_return .= $attendance['class_id']; //further Proccessing here e.g get class name from its class_id
                            $html_return .= "</td><td>";
                            $html_return .= $attendance['date']; 
                            $html_return .="</td></tr>";
                        }

                        echo $html_return;
                    } else {
                        echo 'No record';
                    }
    }
You have to append data like this using jquery:

function get_attendance() {
            var class_id = $('#class_id').val();
            var date = $('#date').val();
            $.ajax({
                type: "post",
                dataType:"json",
                data: {class_id: class_id, date: date},
            url: '<?php echo base_url();?>index.php?admin/manage_attendance',
                success: function (data) {

                var resultData = JSON.parse(response);

            if(resultData!=null){
                attendance= resultData.length;

            }
            if(attendance>0){

                for(i=0;i<attendance;i++){
                    $(".attendance_listing").append("<tr><td>"+resultData[i].status+"</td><td>"+resultData[i].student_id+"</td><td>"+resultData[i].class_id+"</td><td>"+resultData[i].date+"</td></tr>");
                }
            }


        }
    });
   }
   //controler
   function manage_attendance()
    {
        if($this->session->userdata('admin_login')!=1){
                redirect(base_url() , 'refresh');


                $date = $this->input->post('date');
                $class_id = $this->input->post('class_id');

                $page_data['attendance']= $this->db->get_where('attendance', array('class_id' => $class_id , 'date' => $date))->result_array();

                $page_data['page_name']  =  'manage_attendance';
                $page_data['page_title'] =  get_phrase('manage_daily_attendance');
                echo json_encode($page_data);
            }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM