2016-06-29 4 views
0

Для банковского приложения мне необходимо перенаправить пользователя на внешнюю страницу входа, если (и только если) токен доступа неверен. Это перенаправление может быть инициировано только с сервера, поскольку этот токен доступа никогда не отправляется клиенту.Выполнение перенаправления PHP после запроса ajax

PHP выглядит следующим образом (используя тонкий каркас):

$app->get('/banking', function (\Slim\Http\Request $request, \Slim\Http\Response $response, $args) { 
    if(token == valid) { 
     // do your stuff 
    } else { 

     $banking = new Banking(); 
     $connection = $banking->getConnection(); 
     return $response->withHeader('Location', $connection->login_url('someRandomString')); 
     } 
    }); 

$connection->login_url() генерирует URL Я хочу перенаправить. Однако jQuery не перенаправляет меня на эту страницу, а загружает содержимое страницы в строку ответа функции обратного вызова. (Я прочитал here, что браузеры просто будут следовать перенаправлению молча)

Есть ли способ заставить клиента фактически перенаправить страницу или помочь javascript узнать, что на самом деле она должна перенаправляться на внешнюю страницу, а не загружать содержимое в скрипт? Как?

+2

возвращает ответ JSON с перенаправлением URL как свойство, разобрать, что в ваших JavaScript и выполнить на стороне клиента перенаправления – Steve

+0

По определению вы не сможете перенаправить серверную сторону с помощью AJAX – Jonathan

+0

Если вы показываете свой javascript, может быть предоставлен ответ – Jonathan

ответ

2

Установите статус на 302, чтобы браузер перенаправлял.

$response = $response->withStatus(302); 
return $response->withHeader('Location', $connection->login_url('someRandomString')); 

Альтернативно, как вы используете Стройный, вы можете использовать withRedirect:

return $response->withRedirect($connection->login_url('someRandomString')); 
Смежные вопросы