Подтвердить что ты не робот

Как получить запрос на отправку Ajax контроллером symfony2

Я отправляю текстовое сообщение, подобное этому

в html

<textarea id="request" cols="20" rows="4"></textarea>

в javascript

        var data = {request : $('#request').val()};

        $.ajax({
            type: "POST",
            url: "{{ path('acme_member_msgPost') }}",
            data: data,
            success: function(data, dataType)
            {
                alert(data);
            },

            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                alert('Error : ' + errorThrown);
            }

Я написал код в symfony2 Contololler

    $request = $this->container->get('request');
    $text = $request->request->get('data');

но $text имеет значение null.....

Я пробовал обычный почтовый запрос (не Ajax) с помощью тестера HTTP-запроса firefox.

/app_dev.php/member/msgPost

Работа контроллера и значение $text имеют значение.

Итак, я думаю, что php-код в порядке, есть проблема на стороне Ajax, однако

'success: function' вызывается как бы успешно.

Как вы можете получить содержимое структуры данных javascript?

4b9b3361

Ответ 1

Во-первых, вам не нужно обращаться к контейнеру в контроллере, поскольку он уже реализует ContainerAware

Итак, в основном ваш код должен выглядеть так в вашем Controller.php

public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}

Кроме того, убедитесь, что данные, которые вы отправляете, не являются нулевыми, используя console.log(data) в JS вашего приложения.

И, наконец, ответ на ваш вопрос: вы не используете правую переменную, вам нужно получить доступ к значению $('#request').val(), но вы сохранили его в переменной request, и вы использовали data имя переменной в вашем контроллере.

Рассмотрим изменение имени переменной, потому что это запутывает.

Ответ 2

Если вы отправляете данные как JSON - не как форма urlencoded - вам нужно напрямую обратиться к телу запроса:

$data = json_decode($request->getContent());

Ответ 3

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

$data = $request->request->get('request');

'причина запрос - это имя вашего параметра.