я использую 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' в контроллере ничего не отображает
добавьте die(); после дампа и удалите datatype: json, из вашего вызова ajax, вы должны увидеть дамп в своей консоли, иначе это может быть проблема с маршрутизацией.
@ArleighHix ничего не выполняется из контроллера, я думаю, что это проблема маршрутизации, потому что он не получает правильного действия контроллера.
@ehymel мой файл журнала: запрос INFO 21:59:55 Совпадающий маршрут «afficher_offre». Показать контекст INFO 21:59:55 security Заполнил хранилище TokenStorage анонимным токеном.
Можете ли вы подтвердить при просмотре сайта в браузере, что url: "{{ path('ajax_route') }}" разрешено правильно, то есть отображается ли url: /ajax_request в вашем браузере?
Также ваш ajaxAction не возвращает никакого ответа, что необходимо для работы действия. Это может быть причиной ошибки 500. Попробуйте что-нибудь вроде return new JsonResponse().

Ваша ошибка в маршруте.
дорожка(): генерирует относительный 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, я думаю, что это проблема маршрутизации, потому что он не попадает в действие контроллера, дамп не отображается
Код 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_request'
Вы проверяли файлы журналов?