я изучаю Symfony и теперь пытаюсь соединить Ajax с Symfony. Я поместил Ajax между блоком javascript в ветке и поместил очень простую функцию в файл контроллера, чтобы проверить, работает ли она, но обнаружил, что она не работает. Не показывает предупреждение внутри Ajax, а также не показывает дамп($r) в консоли.
это мой скрипт Ajax в файле twig '''
{%block javascripts %}
<script language = "javascript">
$(document).ready(function () {
$("#customize").on("click", function (event) {
$.ajax({
url: "{{ 'test/ajax' }}",
type: 'POST',
async: true,
dataType: 'json',
data:{
id:1,
text: 'hello'
}
}).done(function(data) {
alert('yes');
}).fail(function() {
alert('no');
})
});
});
</script>
{%endblock%}
'''
это Анкер, подключенный к Аяксу. '''
{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}
<a href = "#" id = "customize" name = "customize" class = "btn-basic">Customize</a>
'''
это файл контроллера '''
/**
* @Route("/test/ajax", name = "ajax_edit")
*/
public function ajaxAction(Request $request){
$r = $request->request->get('data');
dump($r);
}
'''
Я думаю, Анкер не отвечает, хотя я нажал на него. но я не знаю как решить эту проблему..
Спасибо за ответ! Я изменил маршрут, чтобы вернуть jsonResponse, и попробовал URL: «/test/ajax», но не показывает никаких изменений на вкладке сети в консоли браузера.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы убедиться, что у вас есть правильный URL-адрес в шаблоне TWIG, вы должны использовать метод path() для создания URL-адреса с использованием имени маршрута:
$(document).ready(function () {
$("#customize").on("click", function (event) {
$.ajax({
url: "{{ path('ajax_edit') }}",
type: 'POST',
async: true,
dataType: 'json',
data: {
id:1,
text: 'hello'
}
}).done(function(data) {
alert('yes');
}).fail(function() {
alert('no');
})
});
});
И, как сказал Боссман, ваш маршрут должен возвращать JsonResponse:
/**
* @Route("/test/ajax", name = "ajax_edit")
*/
public function ajaxAction(Request $request)
{
$r = $request->request->get('data');
return $this->json($r);
}
И, конечно же, если вы хотите проверить содержимое ответа, вы должны открыть консоль браузера на вкладке сети и проверить ответ на запрос. Откройте консоль на правильной вкладке, прежде чем нажать кнопку #customize.
Спасибо за ответ! Я только что исправил свой маршрут и проверил вкладку сети в браузере, но он не показывает никаких изменений...
Не могли бы вы поделиться фактическим кодом? Не могли бы вы попробовать получить доступ к своему маршруту прямо в браузере? Вы уверены, что нажали на хорошую кнопку или у вас правильный идентификатор?
О, я понял.. {%block javascripts %} должно быть {%block javascript %}
Попробуйте изменить на
url: '/test/ajax'. Также ваш метод контроллера должен возвращать объектJsonResponse.