Leeloo
Leeloo

Reputation: 111

CodeIgniter AJAX: POST not working, GET works fine

Fiddling inside CodeIgniter and trying to get a grip on it all as I've never worked with AJAX before.

For some reason, my AJAX is working perfectly when I use the GET method, but if I switch it over to the POST method, it stops working.

My JS:

$(document).ready(function(){

    $('.love').click(function(event) {

        $.ajax({

            type: 'GET',
            url: base_url + '/ajax/love_forum_post',
            data: { post_id: 2, user_id: 1, ajax: 1 },

        });

        return false;

    });

});

And my CONTROLLER:

function love_forum_post()

{

    $post_id = $this->input->get('post_id');
    $user_id = $this->input->get('user_id');
    $is_ajax = $this->input->get('ajax');

    if ($is_ajax)

    {

        $this->load->model('forums_model');
        $this->forums_model->add_love($post_id, $user_id);

    }

    // If someone tries to access the AJAX function directly.

    else

    {

        redirect('', 'location');

    }

}

If I switch the type to 'POST' inside my JS and then catch it on the other end with $this->input->post() it doesn't work.

Any suggestions?

Upvotes: 0

Views: 5872

Answers (3)

joni_demon
joni_demon

Reputation: 666

Try to use this

$post_data = $_POST;

and print the post data using this

print_r($post_data);die();

and you can see there if you catch the post data;

Gudluck!!

Upvotes: 0

NemC
NemC

Reputation: 56

I have tested your code in 2 scenarios: first - without csrf protection, and I see no reason for your code not to run properly. To be able to test it easier, append $.ajax call with success response. Something like this

success: function(response) {
            alert(response);
            }

And add response to your love_forum_post method.

echo print_r($this->input->post(), true);

This would give you clean view of what it going on in your method.

In my installation everything works just fine.

Second scenario is with csrf protection. In this case add new param to your post object.

<?php if ($this->config->item('csrf_protection') === true) : ?>
            post_data.<?php echo $this->security->get_csrf_token_name()?> = '<?php echo $this->security->get_csrf_hash()?>'; 
<?php endif ?>

This would make CI accept post from this url.

Hopefuly it would help. Cheers

Upvotes: 2

itachi
itachi

Reputation: 6393

By any chance you have csrf_protection enabled?

If yes you need to send the token and the value key as post parameter along with post request.

Upvotes: 1

Related Questions