Home » Php » php – get validation errors through jquery ajax and codeigniter

php – get validation errors through jquery ajax and codeigniter

Posted by: admin July 12, 2020 Leave a comment

Questions:

Hi guys i just want to ask why my ajax request does get an string of FALSE (it should get the error messages from controller).

Here is the snippet of controller

    function ajax_verify(){
    $this->form_validation->set_rules('username', '', 'max_length[25]|min_length[4]|trim|required|xss_clean');
    $this->form_validation->set_rules('email', '', 'valid_email|required|trim|xss_clean');  

    if($this->form_validation->run()==FALSE){
             $errors = $this->form_validation->error_array();
             echo json_encode($this->form_validation->error_array());
    }else{
            echo "Success!";
       }

    }

I Extended the Library to get the error Messages (It works perfectly fine in php validation)

class MY_Form_validation extends CI_Form_validation{


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

function error_array(){
    if(count($this->_error_array)===0){
        return FALSE;
    }else{
        return $this->_error_array;
    }
}

function get_tae(){
    return "TAE!";
 }
}

and last the view and the jquery ajax code (Returning false instead of the errors).

     <!DOCTYPE HTML>
     <html>
     <head>
          <meta charset="utf-8">
          <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
         <title>Title</title>
     <body>

    <?php //echo validation_errors('<div class="error">', '</div>');?>
    <?php echo form_open('ajax/ajax_verify', array('id'=>'my_form'));?>
    <?php echo form_label('Username'); ?>
    <?php echo form_input('username', '', array('id' => 'username'));?>
    <?php echo form_label('Email Address'); ?>
    <?php echo form_input('email', '', array('id' => 'email')); ?>
    <?php echo form_submit('submit', 'Submit'); ?>
    <?php echo form_close();?>

    <script type="text/javascript">
     $(function(){
          $('#my_form').submit(function(e){
                $.get('ajax_verify', function(data){
                    $('#contents').append(data);
                }, 'json') ;                   
                e.preventDefault();
            })


      });
           </script>
How to&Answers:

Try this. It will work fine.

In controller Add these two method

 public function CreateStudents() {

        $this->load->helper('form');

        $data['title'] = "Create Students Page";
        $data['success'] = "";
        $this->load->view('templates/header', $data);
        $this->load->view('createstudents', $data);
        $this->load->view('templates/footer', $data);

    }

    public function CreateStudentsAjax() {

        $this->load->helper('form');
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('', '');

        $this->form_validation->set_rules('roll', 'Roll Number', 'required');
        $this->form_validation->set_rules('name', 'Name', 'required');
        $this->form_validation->set_rules('phone', 'Phone', 'required');

        if ($this->form_validation->run()) {

            $this->welcome_model->InsertStudents();
            echo json_encode("Oks");
        } else {

            $data = array(
                'roll' => form_error('roll'),
                'name' => form_error('name'),
                'phone' => form_error('phone')
            );

            echo json_encode($data);
        }
    }

In View Add the form and a DIV named “mesage

<div id="message">


        </div> 

        <?php echo form_open('welcome/CreateStudentsAjax'); ?>

        <label for="roll">Student Roll Number</label>
        <input type="text" id="txtRoll" value="" name="roll"/>

        <label for="Name">Students Name</label>
        <input type="text" id="txtName" value="" name="name"/>

        <label for="Phone">Phone Number</label>
        <input type="text" id="txtPhone" value="" name="phone"/>

        <input type="submit" name="submit" value="Insert New Students"  />

        <?php echo '</form>'; ?>

Now the scripts contains

<script type="text/javascript">

            $(document).ready(function(){

                $('form').submit(function(){
                    //alert('ok');      
                    $.ajax({
                        url:this.action,
                        type:this.method,
                        data:$(this).serialize(),
                        success:function(data){
                            var obj = $.parseJSON(data);

                            if(obj['roll']!=null)
                            {                               
                                $('#message').text("");
                                $('#message').html(obj['roll']);
                                $('#message').append(obj['name']);
                                $('#message').append(obj['phone']);
                            }
                            else
                            {                               
                                $('#message').text("");
                                $('#message').html(obj); 
                            }

                        },
                        erro:function(){
                            alert("Please Try Again");
                        }                        
                    });
                    return false;
                });                        
            });

        </script>

Answer:

Its:

echo json_encode(validation_errors());

OR – Individually

$arr = array(
    'field_name_one' => form_error('field_name_one'),
    'field_name_two' => form_error('field_name_two')
);

echo json_encode($arr);