jQuery 및 AJAX 응답 헤더
이 jQuery AJAX 콜을 수신하면 서버에서 302 리다이렉트 형식으로 응답이 전송됩니다.이 리다이렉트를 취해서 iframe에 로드하고 싶은데, javascript 경보로 헤더 정보를 표시하려고 하면 firebug가 올바르게 인식해도 null로 표시됩니다.
도움이 될 경우 다음과 같이 하십시오.
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
URL을 응답 본문으로 이동하기 위해 서버측 자료에 액세스할 수 없습니다.이것이 가장 쉬운 해결책인 것을 알 수 있기 때문에 헤더의 해석에 도움이 될 것입니다.
이전 버전의 jquery를 사용하는 경우 cballou의 솔루션이 작동합니다.새로운 버전에서는, 다음의 조작도 실행할 수 있습니다.
$.ajax({
type: 'POST',
url:'url.do',
data: formData,
success: function(data, textStatus, request){
alert(request.getResponseHeader('some_header'));
},
error: function (request, textStatus, errorThrown) {
alert(request.getResponseHeader('some_header'));
}
});
문서에 따르면 XMLHttpRequest 객체는 jQuery 1.4에서 사용할 수 있습니다.
이것이 CORS 요구인 경우 디버깅툴(Chrome->Inspect Element->Network 등)에 모든 헤더가 표시될 수 있지만 xHR 오브젝트는 헤더를 취득할 수 있는 것은 (를 통해)뿐입니다.xhr.getResponseHeader('Header')) 이러한 헤더가 단순한 응답 헤더인 경우:
Content-TypeLast-modifiedContent-LanguageCache-ControlExpiresPragma
이 세트에 포함되지 않은 경우 서버에서 반환되는 Access-Control-Expose-Headers 헤더에 존재해야 합니다.
해당 건입니다만, CORS 요청일 경우, 해당 건만 취득할 수 있습니다.Location헤더를 통과하다XMLHttpRequest오브젝트는 다음 헤더도 존재하는 경우에만 사용할 수 있습니다.
Access-Control-Expose-Headers: Location
만약 CORS 요청이 아니라면XMLHttpRequest취득에 문제가 없습니다.
var geturl;
geturl = $.ajax({
type: "GET",
url: 'http://....',
success: function () {
alert("done!"+ geturl.getAllResponseHeaders());
}
});
AJAX와 302 리다이렉트에 대한 안타까운 사실은 브라우저가 헤더를 XHR에 제공하지 않기 때문에 반환에서 헤더를 가져올 수 없다는 것입니다.브라우저는 302를 인식하면 자동으로 리다이렉트를 적용합니다.이 경우 헤더는 브라우저가 취득했기 때문에 firebug에 표시되지만 브라우저가 통과하지 못했기 때문에 ajax에는 표시되지 않습니다.이것이 성공 핸들러와 에러 핸들러가 호출되지 않는 이유입니다.완전한 핸들러만 호출됩니다.
http://www.checkupdown.com/status/E302.html
The 302 response from the Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser
다음은 해당 주제에 대한 stackoverflow 게시물입니다.일부 게시물은 이 문제를 회피하기 위한 해킹에 대해 설명합니다.
jQuery Ajax 호출 후 리다이렉트 요청을 관리하는 방법
HTTP 리다이렉트: 301(영구적)과 302(일시적)
jQuery에서 사용되는 기본 XMLHttpRequest 개체는 항상 302 상태 코드를 반환하지 않고 자동으로 리디렉션에 따릅니다.따라서 반환된 URL을 얻기 위해 jQuery의 AJAX 요청 기능을 사용할 수 없습니다. 대신, 모든 데이터를 폼에 넣고 Atribute를 값으로 설정한 폼을 제출해야 합니다.name iframe " :
$('#myIframe').attr('name', 'myIframe');
var form = $('<form method="POST" action="url.do"></form>').attr('target', 'myIframe');
$('<input type="hidden" />').attr({name: 'search', value: 'test'}).appendTo(form);
form.appendTo(document.body);
form.submit();
의 ★★★★url.do페이지는 iframe에 로드되지만 302 상태가 되면 iframe은 최종 수신처로 리다이렉트 됩니다.
JQUERY 3 이상용 업데이트 2018
오래된 질문인 것은 알지만 위의 어떤 해결책도 나에게 효과가 없었습니다.성공한 솔루션은 다음과 같습니다.
//I only created this function as I am making many ajax calls with different urls and appending the result to different divs
function makeAjaxCall(requestType, urlTo, resultAreaId){
var jqxhr = $.ajax({
type: requestType,
url: urlTo
});
//this section is executed when the server responds with no error
jqxhr.done(function(){
});
//this section is executed when the server responds with error
jqxhr.fail(function(){
})
//this section is always executed
jqxhr.always(function(){
console.log("getting header " + jqxhr.getResponseHeader('testHeader'));
});
}
이것을 시험해 보세요.
type: "GET",
async: false,
complete: function (XMLHttpRequest, textStatus) {
var headers = XMLHttpRequest.getAllResponseHeaders();
}
+1은 PleaseStand로, 다음은 저의 다른 해킹입니다.
검색 후 "cross ajax request"가 XHR 객체에서 응답 헤더를 가져올 수 없다는 것을 발견하고 포기하고 대신 iframe을 사용합니다.
1. <iframe style="display:none"></iframe>
2. $("iframe").attr("src", "http://the_url_you_want_to_access")
//this is my aim!!!
3. $("iframe").contents().find('#someID').html()
언급URL : https://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header
'programing' 카테고리의 다른 글
| 스프링 부트 시 컨트롤러에 도달하기 전에 요청 본문을 변경하는 방법 (0) | 2023.03.16 |
|---|---|
| Angular에서 똑딱거리는 시계(시간) 만드는 방법JS 및 HTML (0) | 2023.03.11 |
| AngularJS를 사용하여 느린 스크립트에 대한 애니메이션을 로드하시겠습니까? (0) | 2023.03.11 |
| JSON 값을 시스템으로 변환할 수 없습니다.Int32 (0) | 2023.03.11 |
| 오류 "오류: A은(는) 요소의 하위 항목으로만 사용되어야 합니다. (0) | 2023.03.11 |