Я хочу отправить две переменные идентификатор и комментарий через AJAX POST запроса. Проблема в том, что я не получаю переменную POST, но маршрут достигнут.Symfony3 отправить запрос AJAX POST
JS:
$.post(Routing.generate('ajax_savecommentary', { id:id, commentary:commentary }),
function(response)
{
}, "json");
Symfony:
public function saveCommentaryAction()
{
if (!$this->get('session')->get('compte'))
return $this->redirect($this->generateUrl('accueil'));
$request = $this->container->get('request_stack')->getCurrentRequest();
$isAjax = $request->isXMLHttpRequest();
if ($isAjax)
{
$information = $this->getDoctrine()->getManager()->getRepository('CommonBundle:Information')->find($_POST['id']);
$information->setCommentaire(str_replace('\n', '\\n', $_POST['commentary']));
$this->getDoctrine()->getManager()->flush();
$response = array("code" => 100, "success" => true, 'commentary' => $_POST['commentary']);
return new Response(json_encode($response));
}
$response = array("code" => 0, "success" => false);
return new Response(json_encode($response));
}
Ошибка:
http://localhost/MyProject/web/app_dev.php/ajax/save/commentary/?id=61&commentary=MyCommentary .
{"code":0,"success":false}
Больше Symfony ошибка:
GET Parameters
Key/Value
commentary/MyCommentary
id/61
И маршрутизации случае необходимости:
ajax_savecommentary:
defaults: { _controller: CommonBundle:Default:saveCommentary }
path: /ajax/save/commentary/
options:
expose: true
Ну, это сработало с условием isAjax. Но я до сих пор не могу получить доступ к переменным $ _POST. На самом деле я узнал, что они отправляются как переменная Get, а не почта, и если я смотрю на $ _GET ['id'], это работает. Для меня это еще не исправлено. –
Привет @ValentinBEAULE жаль, что я не видел, как вы получаете доступ к данным запроса.В symfony предпочтительнее использовать [this] (http://symfony.com/doc/current/book/http_fundamentals.html#requests-and-responses-in-symfony) подход, поэтому не используйте суперглобальные переменные. – Matteo
@ValentinBEAULE вы генерируете неправильный маршрут и вместо этого помещаете данные в маршрут, а не передаете третьим аргументам функции jquery post – Matteo