简体   繁体   中英

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?

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

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.

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!!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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