Я пытаюсь создать ответ JSON в моем контроллере для моего запроса ajax. Цель: Пользователь может писать и оставлять комментарии без обновления всей страницы. Но после запроса ajax этот запрос должен отображать новый комментарий.создать ответ json от контроллера
контроллер
public function viewAction(Request $request, Article $article, $slug, $page)
{
$comment = new Comment();
$form = $this->get('form.factory')->create(CommentType::class, $comment);
if ($request->isXmlHttpRequest() && $form->handleRequest($request)->isValid()) {
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
throw $this->createAccessDeniedException();
}
$user = $this->getUser();
$comment->setAuthor($user);
$em = $this->getDoctrine()->getManager();
$comment->setArticle($article);
$em->persist($comment);
$em->flush();
$nbComments = $this->getDoctrine()
->getManager()
->getRepository('PMPlatformBundle:Comment')
->getNbComments($article->getId())
;
return new JsonResponse(array('data' => array(
'nbComments' => $nbComments,
'newComment' => $comment
)));
}
Аякса на мой взгляд
$("#form").submit(function(e) {
e.preventDefault();
var data = $(this).serialize();
$.ajax({
type: 'POST',
url: '{{ path('pm_platform_view', {slug: article.slug}) }}',
dataType: 'JSON',
data: data,
success: function(objResponse) {
$("#nbComments").html(objResponse.data.nbComments);
$("#newComment").append(objResponse.data.newComment); //or somthing like that
}
});
});
Комментарий объект содержит идентификатор, содержание, автор (идентификатор пользователя) и дату создания.
Мой запрос ajax отлично работает, новый комментарий сохраняется в db, но теперь я должен отображать новые комментарии в моем представлении, поэтому мне нужно создать хороший ответ json в контроллере. Однако есть проблема с ответом.
В контроллере действует ли мой JsonReponse? Я имею в виду, что я положил результат запроса непосредственно в массив, и я не сейчас, если это хорошо или нет для jsonReponse.
Я думал JsonResponse кодировать непосредственно аргументы? См. Https://symfony.com/doc/current/components/http_foundation.html#creating-a-json-response –
ok, пожалуйста, используйте этот JsonResponse ('data' => array ( 'nbComments' => $ nbComments, 'newComments' => $ newComments )) –
Ошибка анализа: синтаксическая ошибка, неожиданная '=>' (T_DOUBLE_ARROW), ожидающая ',' или ')' ... –