Как обнаружить перенаправление сервера с помощью $.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. Я понял что-то не так?
Ответы
Ответ 1
Глядя на спецификацию XHR вы можете видеть, что она не построена так, чтобы быть гибкой. Все переадресации обрабатываются прозрачно:
Если в ответе есть код состояния HTTP из 301, 302... прозрачно следуйте за переадресацией
Никакие события не запускаются в JavaScript с промежуточными кодами состояния. JavaScript будет уведомлен только об окончательном статусе HTTP и возвращенных данных, поскольку это то, что предполагается сделать доступным:
После того, как все HTTP-заголовки получены, синхронный флаг unset, а код статуса HTTP ответа не один из 301, 302, 303, 307 и 308