CodeIgniter AJAX: POST не работает, GET работает нормально - PullRequest
0 голосов
/ 10 марта 2012

Играя в CodeIgniter и пытаясь получить контроль над всем этим, как я никогда раньше не работал с AJAX.

По какой-то причине мой AJAX работает отлично, когда я использую метод GET, но если япереключите его на метод POST, он перестанет работать.

Мой 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;

    });

});

И мой КОНТРОЛЛЕР:

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');

    }

}

Если я переключу тип на 'POST 'внутри моего JS, а затем перехватить его на другом конце с помощью $ this-> input-> post (), он не работает.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Я проверил ваш код в 2 сценариях: первый - без защиты csrf, и я не вижу причин для того, чтобы ваш код не работал должным образом.Чтобы было проще его протестировать, добавьте $ .ajax call с успешным ответом.Примерно так

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

И добавьте ответ на ваш метод love_forum_post.

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

Это даст вам четкое представление о том, что происходит в вашем методе.

В моей установке все работает просто отлично.

Второй сценарий - защита csrf.В этом случае добавьте новый параметр в ваш объект записи.

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

Это заставит CI принять сообщение с этого URL.

Надеюсь, это поможет.Приветствия

1 голос
/ 10 марта 2012

Вы случайно включили csrf_protection?

Если да, вам нужно отправить токен и ключ значения в качестве параметра post вместе с запросом post.

0 голосов
/ 10 марта 2012

Попробуйте использовать это

$post_data = $_POST;

и распечатать данные поста, используя это

print_r($post_data);die();

, и вы сможете увидеть их, если поймаете данные поста;

Gudluck !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...