Ajax-запрос в Symfony 3.4

я использую symfony 3.4, я хочу выполнить действие контроллера по нажатию кнопки в моем шаблоне ветки, поэтому я использовал для этого ajax: сначала я добавил маршрут ajax:

ajax_route:
    path:     /ajax_request
    defaults: { _controller: offerBundle:Default:ajax }
    methods: [post]

затем действие контроллера:

    public function ajaxAction(Request $request)
    {
        $personnage = $request->request->get('personnage');
        dump($request->request);
        $wishlist = new wishlist();
        $wishlist->setUserid($personnage);
        $wishlist->setOfferid(1);
        $em=$this->getDoctrine()->getManager();
        $em->persist($wishlist);
        $em->flush();
    }

аякс часть:

    <script>
        $('.btn').click( function(){
            var personnage = 3;
            $.ajax({
         url: "{{ path('ajax_route') }}",
         type: "POST",
                dataType: "json",
                data: {
                    "personnage": personnage
                },
                async: true,
                success: function (data)
                {
                    console.info(data)
                }
            })
        });

    </script>

это моя html-кнопка:

<button id = "wishlist" class = "btn">add to wishlist</button>

что происходит, когда я нажимаю на кнопку, я получаю этот журнал ошибок:

1 AJAX-запрос Метод: Тип POST: xhr Статус: 500 URL:/ajax_request

и 'var_dump' в контроллере ничего не отображает

Вы проверяли файлы журналов?

ehymel 28.07.2019 23:47

добавьте die(); после дампа и удалите datatype: json, из вашего вызова ajax, вы должны увидеть дамп в своей консоли, иначе это может быть проблема с маршрутизацией.

Arleigh Hix 29.07.2019 00:34

@ArleighHix ничего не выполняется из контроллера, я думаю, что это проблема маршрутизации, потому что он не получает правильного действия контроллера.

jfjfjsjf sdfjjfd 29.07.2019 00:53

@ehymel мой файл журнала: запрос INFO 21:59:55 Совпадающий маршрут «afficher_offre». Показать контекст INFO 21:59:55 security Заполнил хранилище TokenStorage анонимным токеном.

jfjfjsjf sdfjjfd 29.07.2019 01:13

Можете ли вы подтвердить при просмотре сайта в браузере, что url: "{{ path('ajax_route') }}" разрешено правильно, то есть отображается ли url: /ajax_request в вашем браузере?

dbrumann 29.07.2019 06:51

Также ваш ajaxAction не возвращает никакого ответа, что необходимо для работы действия. Это может быть причиной ошибки 500. Попробуйте что-нибудь вроде return new JsonResponse().

dbrumann 29.07.2019 06:53
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
6
955
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша ошибка в маршруте.

дорожка(): генерирует относительный URL-путь с учетом имени маршрута и параметров.

URL() : генерирует абсолютный URL-адрес с учетом имени маршрута и параметров.

в этой строке используйте

url: "{{ url('ajax_route') }}",

Вместо

url: "{{ path('ajax_route') }}",

и твой контроллер

use Symfony\Component\HttpFoundation\JsonResponse;
*
*

      public function ajaxAction(Request $request)
         $arrayAjax = array("position" => "fasle");
        {
      if (($request->getMethod() == Request::METHOD_POST) && ($request->isXmlHttpRequest())) {

            $personnage = $request->request->get('personnage');
            dump($request->request);
            $wishlist = new wishlist();
            $wishlist->setUserid($personnage);
            $wishlist->setOfferid(1);
            $em=$this->getDoctrine()->getManager();
            $em->persist($wishlist);
            $em->flush();
            $arrayAjax = array("position" => "true");
         }
    return new JsonResponse($arrayAjax2);
       }

спасибо за ваш ответ, я заменил свой код на тот, который вы написали, но у меня все еще есть статус запроса ajax 500, я думаю, что это проблема маршрутизации, потому что он не попадает в действие контроллера, дамп не отображается

jfjfjsjf sdfjjfd 29.07.2019 11:12

Код Javascript является внутренним или импортирует внешний файл Javascript на страницу. если кодирует ajax во внешнем файле, ваша переменная URL должна быть примерно такой --> url : window.location.protocol + "//" + window.location.hostname+'/ajax_request'; если вы находитесь в режиме разработки, вы должны использовать его -> url: window.location.protocol + "//" + window.location.hostname+'YourPatch/web/app_dev.php/ajax_req‌​uest'

pedram shabani 29.07.2019 12:04

Другие вопросы по теме