jQuery와 AJAX 응답 헤더
그래서이 jQuery AJAX 호출을 얻었고 응답은 302 리디렉션의 형태로 서버에서 나옵니다. 이 리디렉션을 가져 와서 iframe에로드하고 싶지만 자바 스크립트 경고로 헤더 정보를 보려고하면 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-> 요소 검사-> 네트워크)에 모든 헤더가 표시 될 수 있지만 xHR 객체는 간단한 응답 헤더 인 경우을 통해 헤더를 검색합니다 ( xhr.getResponseHeader('Header')
) .
Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
이 세트에 없으면 서버가 리턴 한 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
다음은 주제에 대한 일부 스택 오버 플로우 게시물입니다. 일부 게시물은이 문제를 해결하기위한 해킹에 대해 설명합니다.
jQuery Ajax 호출 후 리디렉션 요청을 관리하는 방법
HTTP 리디렉션 : 301 (영구) vs. 302 (임시)
The underlying XMLHttpRequest object used by jQuery will always silently follow redirects rather than return a 302 status code. Therefore, you can't use jQuery's AJAX request functionality to get the returned URL. Instead, you need to put all the data into a form and submit the form with the target
attribute set to the value of the name
attribute of the 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();
The server's url.do
page will be loaded in the iframe, but when its 302 status arrives, the iframe will be redirected to the final destination.
try this:
type: "GET",
async: false,
complete: function (XMLHttpRequest, textStatus) {
var headers = XMLHttpRequest.getAllResponseHeaders();
}
+1 to PleaseStand and here is my other hack:
after searching and found that the "cross ajax request" could not get response headers from XHR object, I gave up. and use iframe instead.
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()
UPDATE 2018 FOR JQUERY 3 AND LATER
I know this is an old question but none of the above solutions worked for me. Here is the solution that worked:
//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'));
});
}
참고URL : https://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header
'development' 카테고리의 다른 글
MVC 3 : Ajax를 통해로드 될 때 레이아웃 페이지없이 뷰를 렌더링하는 방법? (0) | 2020.06.09 |
---|---|
콘솔에 vbscript 출력 (0) | 2020.06.09 |
레일-컨트롤러 조치 이름을 문자열로 (0) | 2020.06.09 |
JavaScript를 사용하여 div의 내용을 지우려면 어떻게해야합니까? (0) | 2020.06.09 |
문자열의 모든 문자를 반복하는 가장 빠른 방법 (0) | 2020.06.09 |