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



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


Почему бы просто не указать 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 Вы можете "отправить" все, что хотите, на своем 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 и т. д. Ура
Я не думаю, что вы можете перенаправить с ajax; контроллер должен просто выполнить проверку и вернуть результат, а затем JS должен выполнить перенаправление (например, window.location)