Проблема с php Symfony 4 Ajax

я изучаю 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);
}

'''

Я думаю, Анкер не отвечает, хотя я нажал на него. но я не знаю как решить эту проблему..

Попробуйте изменить на url: '/test/ajax'. Также ваш метод контроллера должен возвращать объект JsonResponse.

Bossman 03.10.2022 12:05

Спасибо за ответ! Я изменил маршрут, чтобы вернуть jsonResponse, и попробовал URL: «/test/ajax», но не показывает никаких изменений на вкладке сети в консоли браузера.

maz32 04.10.2022 03:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы убедиться, что у вас есть правильный 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.

Спасибо за ответ! Я только что исправил свой маршрут и проверил вкладку сети в браузере, но он не показывает никаких изменений...

maz32 04.10.2022 03:22

Не могли бы вы поделиться фактическим кодом? Не могли бы вы попробовать получить доступ к своему маршруту прямо в браузере? Вы уверены, что нажали на хорошую кнопку или у вас правильный идентификатор?

Skuti 04.10.2022 05:51

О, я понял.. {%block javascripts %} должно быть {%block javascript %}

maz32 04.10.2022 10:06

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