$ .post с данными возвращает ошибку HTTP 500 - PullRequest
0 голосов
/ 15 декабря 2011

В настоящее время я работаю над проектом со структурой CodeIgniter. Я использую jQuery 1.7.1, и я хочу реализовать вызов ajax с данными, чтобы добавить сообщение.

Странно то, что функция работает и возвращает предупреждение без лишних данных. Но функция с данными возвращает ошибку HTML 500 (в консоли из chrome).

Запрашиваемая страница - не более чем скрипт php, повторяющий: «Это работает!».

Код, который работает:

$.post("/ajax/add_post_to_profile",
            function(data) {
                alert("Data Loaded: " + data);
});

Код, который не работает:

$.post("/ajax/add_post_to_profile", { msg: "My test msg!"},
            function(data) {
                alert("Data Loaded: " + data);
        });

UPDATE:

Здесь контроллер codeigniter, который обрабатывает запрашиваемую страницу:

class PostController extends CI_Controller {

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

    public function addPostToProfile() {     
        echo 'It works!!!';
    }
}

Обновление 2:

Я протестировал функцию с новым запросом файла, помещенным в корень приложения. И тогда это работает как шарм.

Похоже, контроллер CodeIgniter блокирует запрос POST или что-то в этом роде.

Обновление 3:

Я обнаружил, что это безопасность CSRF CodeIgniter. Это работает, когда я выключаю его. Я искал в Интернете решение сохранить CSRF, но код, который я нашел, не работает :(.

<script>
    $('#ajax_test').click(function() {
        $.post("/ajax/add_post_to_profile", { msg: "My test msg!", csrf_token_name: "<?php echo $this->security->get_csrf_hash(); ?>"},
            function(data) {
                alert("Data Loaded: " + data);
        });
    });
</script>

Ответы [ 3 ]

0 голосов
/ 16 декабря 2011

Просто быстрое обновление с установленными переменными, оно работает, только что попробовал, большое спасибо;)

<script>

   var csrf_token_name = "<?php echo $this->security->get_csrf_token_name(); ?>";
   var csrf_hash = "<?php echo $this->security->get_csrf_hash(); ?>";

    $('#ajax_test').click(function() {
        $.post("/ajax/add_post_to_profile", { msg: "My test msg!", csrf_token_name:csrf_hash},
            function(data) {
                alert("Data Loaded: " + data);
        });
    });
</script>

Теперь функция работает нормально с включенной CSRF!Спасибо за помощь!

0 голосов
/ 16 декабря 2011

Вам следует сериализовать данные формы, если вы используете защиту CSRF!

$('#ajax_test').click(function() {
    ...
    data: jQuery('#theForm').serialize(),
    ...
0 голосов
/ 15 декабря 2011

проверьте файл site_url или add_post_to_profile, должно быть что-то не так.иначе нет ничего плохого в функции jquery

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