답변:
AJAX 요청은 리디렉션을 따르지 않을 기회가 없습니다 (즉, 리디렉션을 따라야 함). 자세한 내용은이 답변 https://stackoverflow.com/a/2573589/965648 에서 찾을 수 있습니다.
미래에 오신 것을 환영합니다!
지금은 xhr 객체의 "responseURL"속성이 있습니다. 예!
XMLHttpRequest에서 응답 URL을 얻는 방법을 참조하십시오 .
그러나 jQuery (최소 1.7.1)는 XMLHttpRequest 객체에 대한 액세스를 직접 제공하지 않습니다. 다음과 같이 사용할 수 있습니다.
var xhr;
var _orgAjax = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
xhr = _orgAjax();
return xhr;
};
jQuery.ajax('http://test.com', {
success: function(responseText) {
console.log('responseURL:', xhr.responseURL, 'responseText:', responseText);
}
});
깨끗한 솔루션이 아니며 jQuery 팀이 향후 릴리스에서 responseURL에 대해 뭔가를 만들 것이라고 생각합니다.
팁 : 원본 URL을 responseUrl과 비교하십시오. 같으면 리디렉션이 제공되지 않습니다. "정의되지 않음"이면 responseUrl이 지원되지 않을 수 있습니다. 그러나 Nick Garvey가 말했듯이 AJAX 요청은 리디렉션을 따르지 않을 기회가 없지만 responseUrl 속성 을 사용하여 여러 작업을 해결할 수 있습니다.
이 질문에 답한 다른 사람들은이 정보가 브라우저에 의해 우리에게 숨겨져 있다는 사실이 (슬프게도) 정확하지만, 제가 생각해 낸 해결 방법을 게시 할 것이라고 생각했습니다.
X-Response-Url
요청 된 URL이 포함 된 사용자 지정 응답 헤더 ( ) 를 설정하도록 서버 앱을 구성했습니다 . 내 ajax 코드가 응답을받을 때마다이 xhr.getResponseHeader("x-response-url")
정의 되어 있는지 확인 하고,이 경우을 통해 원래 요청한 URL과 비교합니다 $.ajax()
. 문자열이 다르면 리디렉션이 있었고 추가로 실제로 도착한 URL이 무엇인지 알고 있습니다.
이것은 서버 측의 도움이 필요하다는 단점이 있으며, 왕복 중에 URL이 뭉쳐지면 (인용 / 인코딩 문제 등으로 인해) 고장날 수 있습니다 ... 그러나 99 %의 경우에는 완료되었습니다.
서버 측에서 필자의 특정 사례는 Pyramid 웹 프레임 워크를 사용하는 Python 애플리케이션이었고 다음 스 니펫을 사용했습니다.
import pyramid.events
@pyramid.events.subscriber(pyramid.events.NewResponse)
def set_response_header(event):
request = event.request
if request.is_xhr:
event.response.headers['X-Response-URL'] = request.url