Symfony перенаправить на другую страницу после истинного сравнения запроса от ajax

В моем JavaScript есть функция, которая возвращает данные. Я хотел бы отправить данные своему контроллеру и провести тест с этими данными из моего js. Затем, если это правда, я хочу отобразить другую страницу.

$.ajax({
        type: "POST",
        url: path,
        data: { s_certifiedNir: a.Patients[0].s_certifiedNir },

        success: function (data) {

           console.info('yooo' + a.Patients[0].s_certifiedNir) ;


        }
        ,
        error: function () {
            alert('ko');
        }

    });

Вот мой контроллер:

public function getCpsInfosAction(Request $request)
{
    $nir= $request->get('s_certifiedNir');
    if ($request->isXmlHttpRequest()) {
        $encoders = array(new XmlEncoder(), new JsonEncoder());
        $normalizers = array(new ObjectNormalizer());
        $serializer = new Serializer($normalizers, $encoders);
        $data = $serializer->normalize($nir);
        if ($data=='2550699999999 34')
        {
            return $this->redirectToRoute('test');
        }

        //return new  JsonResponse($data);
    }

}

Я получил ko, и нет зарегистрированных путей для пространства имен "DMP". DMP - это первый маршрут моей страницы.

Я не думаю, что вы можете перенаправить с ajax; контроллер должен просто выполнить проверку и вернуть результат, а затем JS должен выполнить перенаправление (например, window.location)

zedling 12.11.2018 12:55

Я знаю, но проблема: я должен сравнить результат челюсти с информацией из базы данных, поэтому я должен пройти мимо контроллера

EsanteDev 12.11.2018 13:47
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Почему бы просто не указать URL-адрес перенаправления в ответе и не обработать его в своем JS ?:

public function getCpsInfosAction(Request $request)
{
    if ($request->isXmlHttpRequest()) {
        // ...
        if ($data === '2550699999999 34') {
            return new JsonResponse([
                'success'  => true,
                'redirect' => $this->generateUrl('your_route');
            ]);
        }

        return new JsonResponse(['success' => false]); // else..
    }
}

Затем просто запустите перенаправление из JavaScript:

$.ajax({
    // ...
    success: function (data) {
        if (data.success) {
            window.location.href = data.redirect; // <-- HERE
        }
    },
    // ...
});

это работает, спасибо, но как я могу отправить много информации, я имею в виду, что отправляю объект данных

EsanteDev 13.11.2018 14:39

@EsanteDev Вы можете "отправить" все, что хотите, на своем JsonResponse, например return new JsonResponse(['success' => true, 'redirect' => $this->genUrl('route'), 'time' => new DateTime(), 'current_item' => $someEntity, 'blah' => 'blah']);, и все это будет доступно в вашей функции успеха JS / jQuery через data.blah или data.current_item и т. д. Ура

Yes Barry 14.11.2018 19:07

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