Ajax post обрабатывает данные данных в контроллере symfony2

Я действительно не понимаю, как обращаться с сообщениями после запроса ajax. Это мой javascript:

$.ajax({
     type: "POST",
     url: Routing.generate('save'),
     contentType: 'application/json; charset=UTF-8',
     data: {
          title: title,                
          description: description,
          questions: questions,              
         }
  });

Единственный способ получить данные внутри моего действия с контроллером:

$content = $request->getContent()

$content - строка параметров url. Почему бы мне не получить данные с помощью:

$request->get('title')

Каков правильный способ обработки почтовых данных с помощью jquery ajax metd?

Большое спасибо.

ИЗМЕНИТЬ

Итак, я обнаружил следующую проблему:

В моем текущем проекте запрос выглядит следующим образом:

https://dl.dropboxusercontent.com/u/17861060/false.png

$.ajax({
            type: "POST",
            url: Routing.generate('poll_save'),                
            data: {
                title: title                    
            }
        })

Данные запрашиваются с помощью Запросить полезную нагрузку, но я не знаю почему.

В чистом проекте запрос выглядит следующим образом:

https://dl.dropboxusercontent.com/u/17861060/right.png

$.ajax({
                type: "POST",
                url: '{{path('_demo')}}',                    
                data: {
                    title: 'title',                
                    description: 'description',
                    questions: 'questions',
                    pollid: 1                        
                }
            })

Все, что в моем проекте идет не так. У вас есть идея, почему данные запрашиваются с помощью Request Payload?

Ответ 1

Используете ли вы объект запроса в своем контроллере?

<?php
namespace Acme\DemoBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
//...other things to use

class MyController extends Controller
{
    public function handleRequestAction() {

        $request = $this->get('request');
        //request your data
        $title   = $request->get('title');
        //or in one line
        $title   = $this->get('request')->request->get('title');
    }
}
?>

Это мой обычный способ, когда я хочу получить данные из вызова ajax. Не могли бы вы опубликовать содержимое $content?

Я не вижу проблем с отправкой данных, как вы. Построение объекта json может быть полезным, но способ, которым вы его выполняете, кажется мне хорошим. Я тоже это сделал.

ИЗМЕНИТЬ

Обычно вы также можете получить доступ ко всем данным в запросе, выполнив следующие действия:

$all = $request->request->all();

Возможно, вы могли бы var_dump() видеть переменные, чтобы увидеть, что-то в них.

Ответ 2

Вы можете создать свой json-объект и передать объект JSON на ваш контроллер с помощью JSON.stringify.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

var obj = {
      title: title,                
      description: description,
      questions: questions              
};

$.ajax({
 type: "POST",
 url: Routing.generate('save'),
 contentType: 'application/json; charset=UTF-8',
 data: JSON.stringify(obj)
});

Ответ 3

опрос - название формы  serialize -популяция переменных

 $.ajax({
            url: $("#quiz").attr("action"),
            data: $("#quiz").serialize(),
            type: 'POST'
 });

или

$.ajax({
                url: $("#commentForm").attr("action"),
                data: {
                    comment: commentFormID.val()
                },
                type: 'POST'
});

Контроллер - больше похоже на предыдущие комментарии.

$request = $this->get('request');
$usercomment=$request->request->get('parameterName');

Ответ 4

Почему Джон? Я имел в виду требование типа контента json? Если это не так, я обрабатываю ajax и использую FOSRoutingbundle, который, как я вижу, вы используете.

$(document).ready(function(){
    $('#myForm').submit( function(e){       

        e.preventDefault();
        var $form = $(this);
        var $formPHP = $form.serializeArray();
        var $url = Routing.generate( 'route_to_use');

        $.post( $url, $formPHP, function(data){
        .....
        });

    });    
});

Затем в контроллере вы можете использовать обычный запрос.