JamesDooh
JamesDooh

Reputation: 63

Check if AJAX call is success or not in codeigniter

I am using an AJAX call to insert some data into MYSQL

JS code:

$("input.addtruck").click(function (event) {
event.preventDefault();
        var user_id = $("input#user_id").val();
    var numar = $("input#numar").val();
    var serie = $("input#serie").val();
    var marca = $("select#marca").val();
    jQuery.ajax({
        type: "POST",
        url: "<?php echo base_url(); ?>" + "aplicatie/add_truck",
        dataType: 'json',
        data: {user_id: user_id, numar: numar, serie: serie, marca: marca},
    });
    success: function (res) {
        if (res)
        {
            jQuery("div#truck_form").hide();
            jQuery("div#success").show();
        } else {
            jQuery("div#error").show();
        }
    }
});

Method used from controller:

    function add_truck() {
            $data = array(
                'user_id' => $this->input->post('user_id'),
                'marca' => $this->input->post('marca'),
                'serie' => $this->input->post('serie'),
                'numar' => $this->input->post('numar')
            );
//Transfering data to Model
            $this->trucks_model->insert_truck($data);
            $data['confirmare'] = 'Data Inserted Successfully';
        }

And method from models file

function insert_truck($data){
$this->db->insert('trucks', $data);
}

Basicly i need to hide the #truck_form and show #success if the data was inserted, or show #error .

Upvotes: 2

Views: 2355

Answers (5)

Akhil Menon
Akhil Menon

Reputation: 306

Just remove event.preventDefault() from the code and use success like below

jQuery.ajax({
    type: "POST",
    url: "<?php echo base_url(); ?>" + "aplicatie/add_truck",
    dataType: 'json',
    data: {user_id: user_id, numar: numar, serie: serie, marca: marca},
    success : functionName
});

function functionName(){

//your code for success

}

Upvotes: 0

Arvind Jaiswal
Arvind Jaiswal

Reputation: 442

You can add error after success to know ajax called successfully or not.

   jQuery.ajax({

        type: "POST",
        url: "<?php echo base_url(); ?>" + "aplicatie/add_truck",
        dataType: 'json',
        data: {user_id: user_id, numar: numar, serie: serie, marca: marca},
        success: function (res) {
           if (res)
            {
                jQuery("div#truck_form").hide();
                jQuery("div#success").show();
            } else {
                jQuery("div#error").show();
            }

        },
        error: function (xhr,err) {

            alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
            alert("responseText: "+xhr.responseText);

        }               
    });

Upvotes: 0

Abdulla Nilam
Abdulla Nilam

Reputation: 38670

In AJAX

<script type="text/javascript">
    $("#addtruck").click(function (event) { // change
        event.preventDefault();

        var user_id = $("#user_id").val(); // remove input(input#user_id)
        var numar = $("#numar").val();
        var serie = $("#serie").val();
        var marca = $("#marca").val();

        $.ajax(
            {
                type: "post",
                dataType: 'json',
                url: "<?php echo base_url(); ?>aplicatie/add_truck",        
                data: {user_id: user_id, numar: numar, serie: serie, marca: marca},
            }
        );
        success: function (res) {
            if (res == TRUE)
            {
                jQuery("truck_form").hide(); // remove div on here
                jQuery("success").show(); // remove div on here
            } else {
                jQuery("error").show(); // remove div on here
            }
        }
    });
</script>

In HTML

Button should be

<input type="button" id="addtruck" value="Add New Truck"> 

and form action="" should be removed

In Controller

function add_truck() {
    $data = array(
        'user_id' => $this->input->post('user_id'),
        'marca' => $this->input->post('marca'),
        'serie' => $this->input->post('serie'),
        'numar' => $this->input->post('numar')
    );

    # passing to model
    $res = $this->trucks_model->insert_truck($data);

    # Check return value on $res
    if($res == TRUE)
    {
        $data['msg'] = 'true';
    }
    else
    {
        $data['msg'] = 'false';
    }
    echo json_encode($data);
}

In Model

function insert_truck($data){
    $this->db->insert('trucks', $data);
    $row_affect = $this->db->affected_rows();

    if($row_affect > 0)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }

}

Upvotes: 1

Maha Dev
Maha Dev

Reputation: 3965

You can create an array of response like this. As you ajax dataType is json so you will send response in json.

  function add_truck() {
            $response = array(); 
            $data = array(
                'user_id' => $this->input->post('user_id'),
                'marca' => $this->input->post('marca'),
                'serie' => $this->input->post('serie'),
                'numar' => $this->input->post('numar')
            );
//Transfering data to Model
            $check_insert = $this->trucks_model->insert_truck($data);
            if(check_insert){
                $response['status'] = 'true';
                $response['msg'] = 'Data Inserted Successfully';
            }else{
                $response['status'] = 'false';
                $response['msg'] = 'Problem in data insertion';
            }

            echo json_encode($response);
            die;
        }

and then in ajax :

success: function (res) {
    if (res.status == 'true')
    {
        jQuery("div#truck_form").hide();
        jQuery("div#success").show();
    } else {
        jQuery("div#error").show();
    }

}
error: function (result) {
       console.log('Problem with ajax call insert');
}

And method from models file Just to ensure row inserted return insert_id

function insert_truck($data){
   $this->db->insert('trucks', $data);
   $insert_id = $this->db->insert_id();
   return $insert_id; 
}

Upvotes: 1

Saty
Saty

Reputation: 22532

You need to check data is inserted or not in database using affected_rows in model

Model

function insert_truck($data){
$this->db->insert('trucks', $data);
$afftectedRows=$this->db->affected_rows();
if($afftectedRows>0)
{
    return TRUE;
}
else{
    return FALSE;
}

}

YOu need to echo your result in Controller

Controller

function add_truck() {
            $data = array(
                'user_id' => $this->input->post('user_id'),
                'marca' => $this->input->post('marca'),
                'serie' => $this->input->post('serie'),
                'numar' => $this->input->post('numar')
            );
//Transfering data to Model
        $res=$this->trucks_model->insert_truck($data);
        if($res){
        $data['msg'] = 'true';
        }else{
           $data['msg'] = 'false';
        }
         echo json_encode($data);
        }

Ajax

success: function (res) {
        if (res.msg=='true')
        {
            jQuery("div#truck_form").hide();
            jQuery("div#success").show();
        } else {
            jQuery("div#error").show();
        }
    }

Upvotes: 2

Related Questions