By_Engine
@By_Engine

Как получить url редиректа сервера xmlhttprequest?

Происходит отправка формы на сервер с помощью xmlhttprequest. Сервер может вернуть json или установить редирект на другую страницу с помощью header('Location: url').
Как можно узнать этот url с помощью js?

В xhr содержится код ответа 200 и отсутствие заголовка "Location", что означает - браузер сделал редирект до завершения xhr
  • Вопрос задан
  • 681 просмотр
Решения вопроса 1
muzikant777
@muzikant777
PHP/Vue разработчик
А почему сервер возвращает 200, а не 301/302?
Решением в вашем случае будет отправка ответа от сервера с кодом 302 и кастомным заголовком (типа X-Redirect), и последующей его проверкой в js.

Так, например, сделано в Yii2:
if (Yii::$app->getRequest()->getIsAjax()) {
                if (Yii::$app->getRequest()->getHeaders()->get('X-Ie-Redirect-Compatibility') !== null && $statusCode === 302) {
                    // Ajax 302 redirect in IE does not work. Change status code to 200. See https://github.com/yiisoft/yii2/issues/9670
                    $statusCode = 200;
                }
                if (Yii::$app->getRequest()->getIsPjax()) {
                    $this->getHeaders()->set('X-Pjax-Url', $url);
                } else {
                    $this->getHeaders()->set('X-Redirect', $url);
                }
            } else {
                $this->getHeaders()->set('Location', $url);
            }

И проверка:
$(document).ajaxComplete(function (event, xhr) {
            var url = xhr && xhr.getResponseHeader('X-Redirect');
            if (url) {
                window.location.assign(url);
            }
        });


Ну, и нужно помнить, что IE считает AJAX, который вернул не 200, ошибочным ответом. ¯\_(ツ)_/¯
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы