Ajax 요청에서 리다이렉트를 검출하고 있습니까?
jQuery를 사용하여 URL을 GET하고 302 리다이렉트로 응답했는지 여부를 명시적으로 확인하고 싶지만 리다이렉트를 따르지 않습니다.
jQuery's$.ajax
는 항상 리다이렉트를 따르는 것처럼 보입니다.이를 방지하고 이를 따르지 않고 리다이렉트를 표시하려면 어떻게 해야 합니까?
"jquery ajax redirect"와 같은 제목을 가진 다양한 질문이 있지만 모두 서버가 제공하는 상태를 직접 확인하는 것이 아니라 다른 목표를 달성하는 것과 관련된 것으로 보입니다.
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 팀이 대응을 위해 무언가를 만들 것이라고 생각합니다.향후 릴리스의 URL.
힌트: 원래 URL과 responseUrl을 비교하기만 하면 됩니다.동일할 경우 리다이렉트는 이루어지지 않았습니다.정의되지 않은 경우 responseUrl은 지원되지 않을 수 있습니다.그러나 Nick Garvey가 말했듯이 AJAX 요청은 리다이렉트를 따르지 않을 기회가 없지만 responseUrl 속성을 사용하여 많은 작업을 해결할 수 있습니다.
이 질문에 대답한 다른 사람들은 (슬프게도) 이 정보가 브라우저에 의해 숨겨져 있다는 것은 맞지만, 저는 제가 생각해낸 회피책을 올려야겠다고 생각했습니다.
커스텀 응답 헤더를 설정하도록 서버 앱을 설정했습니다.X-Response-Url
)에 요구된 URL이 포함되어 있습니다.내 아약스 코드가 응답을 받을 때마다,xhr.getResponseHeader("x-response-url")
정의되어 있습니다.이 경우 이 URL을 경유하여 처음 요구된 URL과 비교합니다.$.ajax()
문자열이 다를 경우 리다이렉트가 있었던 것을 알고 있으며, 또한 실제로 도착한 URL도 알고 있습니다.
이것은 서버측의 지원이 필요한 단점이 있습니다.또한 라운드 트립 중에 URL이 뭉개지면(견적/부호화 문제 등으로 인해) 고장이 날 수 있습니다.하지만 99%의 경우, 이것으로 작업이 완료되는 것 같습니다.
서버 측에서는 Python 어플리케이션을 Pyramid Web Framework를 사용하여 다음과 같은 스니펫을 사용했습니다.
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
이제 fetch API를 사용할 수 있습니다/ 반환됩니다.redirected: *boolean*
언급URL : https://stackoverflow.com/questions/9177252/detecting-a-redirect-in-ajax-request
'programing' 카테고리의 다른 글
서로 다른 JS 라이브러리에서 생성된 모든 AJAX 요청을 가로채는 방법 (0) | 2023.04.02 |
---|---|
React와 동등한 TypeScript는 무엇입니까?PropTypes.node? (0) | 2023.04.02 |
각도 설정JS가 정말 jQuery가 필요한가요? (0) | 2023.04.02 |
woocommerce를 사용하여 사용자 지정 '카트에 추가' 생성 (0) | 2023.04.02 |
Spring @Value가 속성 파일의 값으로 확인되지 않습니다. (0) | 2023.04.02 |