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){
.....
});
});
});
Затем в контроллере вы можете использовать обычный запрос.