Как обнаружить перенаправление сервера с помощью $.get() - программирование
Подтвердить что ты не робот

Как обнаружить перенаправление сервера с помощью $.get()

Нет повторяющегося вопроса

Этот вопрос не является дубликатом одного из вышеупомянутых, так как у меня есть без контроля по ответу сервера, как это имеет место в двух других вопросах выше.


Я использую $.get для загрузки содержимого внешнего документа на текущий веб-сайт.

Однако мне нужен конечный URL этого внешнего документа. В случае, когда исходный URL-адрес перенаправляется (302) на другой URL-адрес, мне нужен новый URL-адрес.

Можно ли получить конечный URL из загруженного документа (после перенаправления 302) с помощью метода jQuery $.get?


Update

Основываясь на обратной связи ниже, я обновил свой код до этого, но я до сих пор не получаю окончательный URL-адрес:

$.get(url, function(html, status, xhr){
    console.log(xhr.getResponseHeader('TM-finalURL')); // result: null
});

Запись всех заголовков ответов с помощью xhr.getAllResponseHeaders() дает мне (для страницы с перенаправлением 302) следующий результат:

Pragma: no-cache
Date: Fri, 28 Feb 2014 15:30:22 GMT
Server: Apache
X-Powered-By: PHP/5.3.28
Transfer-Encoding: chunked
Content-Type: text/html
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Keep-Alive: timeout=15, max=100
Expires: Thu, 19 Nov 1981 08:52:00 GMT

Но нет окончательного URL. Я понял что-то не так?

4b9b3361

Ответ 1

Глядя на спецификацию XHR вы можете видеть, что она не построена так, чтобы быть гибкой. Все переадресации обрабатываются прозрачно:

Если в ответе есть код состояния HTTP из 301, 302... прозрачно следуйте за переадресацией

Никакие события не запускаются в JavaScript с промежуточными кодами состояния. JavaScript будет уведомлен только об окончательном статусе HTTP и возвращенных данных, поскольку это то, что предполагается сделать доступным:

После того, как все HTTP-заголовки получены, синхронный флаг unset, а код статуса HTTP ответа не один из 301, 302, 303, 307 и 308