Symfony: Как перенаправить на новую страницу в вызове AJAX? - PullRequest
1 голос
/ 22 февраля 2010

У меня есть jquery, отправляющий 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 ]

2 голосов
/ 22 февраля 2010

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

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

1 голос
/ 30 сентября 2014

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

// 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...