2010-02-22 2 views
1

У меня есть jquery, отправляющий запрос AJAX, который выполняет некоторые проверки, а затем должен перенаправить на другую страницу или вернуть данные. Все работает отлично, за исключением того, что я не могу принудительно перенаправить в файл моих действий. Я пробовал:Symfony: Как перенаправить на новую страницу в AJAX-вызов?

$this->redirect('@new_page'); // DOESN'T WORK 

И ...

$this->context->getController()->redirect('@new_page'); // DOESN'T WORK 

Я думаю, что есть способ вернуть перенаправление URL обратно в Jquery и перенаправить оттуда, но я бы предпочел, чтобы справиться с переадресацией в мое действие.

Возможно ли это?

Благодаря

UPDATE:

Окончательный рабочий раствор выше должен был вернуть TRUE/FALSE обратно на запрос Ajax и добавьте следующие строки в моей функции JQuery:

if(data == true) window.location.href = "<?php echo url_for('@new_page') ?>"; 
else // do other stuff 

Новый URL-адрес страницы не должен быть динамическим и мог быть вставлен при загрузке первой страницы. В этом случае TRUE/FALSE достаточно для данных, которые будут возвращены для предложения else.

ответ

2

Помните, что с действием AJAX результат возвращается (обычно) обработчику обратного вызова или элементу DIV на странице. Таким образом, перенаправление, которое вы пытаетесь использовать, относится только к ответному действию AJAX, а не ко всем запросам HTTP-страницы. Переадресация, вероятно, отлично работает из symfony, только что ответ, который он возвращает, подается на ваш DIV или обработчик обратного вызова, и он не знает, что делать с HTML. Вам действительно нужно запустить перенаправление или обновление из обработчика обратного вызова AJAX.

Вы можете рассмотреть сторонясь полный редирект в пользу использования error обратного вызова и отображения другого DIV с содержанием сообщения об ошибке, но это error обратного вызова может использоваться для переадресации тоже, если вы предпочитаете.

+0

имеет смысл спасибо. Посмотрите на перенаправление JQuery/callback. – Tom

1

меня обращаться с этим один на код ниже, оставаясь при этом в контроллере

// some other code goes here 
// run this in special condition like if 
$url = $this->generateUrl('fos_user_security_login'); 
echo '<script>window.location = "'.$url.'";</script>';die; 
Смежные вопросы