>  기사  >  웹 프론트엔드  >  ajax 및 302 응답 코드 테스트_JavaScript

ajax 및 302 응답 코드 테스트_JavaScript

WBOY
WBOY원래의
2016-05-16 17:19:091155검색

Ajax 요청에서 서버 측 응답이 302 Found인 경우 Ajax 콜백 함수에서 이 상태 코드를 얻을 수 있습니까? 리디렉션을 위해 응답 헤더에서 위치 값을 얻을 수 있나요? 실제 상황을 살펴보겠습니다.
jquery의 $.ajax()를 사용하여 ajax 요청을 시작하는 javascript 코드는 다음과 같습니다.

코드 복사 코드

$.ajax({
url: '/oauth/respond',
type: 'post',
data: data,
완료 : function(jqXHR){
console.log(jqXHR.status);
},
오류: function(xhr) {
console.log(xhr.status);
}
});

서버가 302 Found 응답을 반환할 때 브라우저에서 실행되는 결과는 다음과 같습니다.
ajax 및 302 응답 코드 테스트_JavaScript
 

Ajax의 Complete() 및 error() 콜백 함수에서 얻은 상태 코드는 모두 302가 아닌 404입니다.

이게 왜죠?

stackoverflow에서 발견

코드 복사 코드는 다음과 같습니다.

브라우저가 리디렉션을 자동으로 처리하므로 XHR 콜백으로 리디렉션을 처리할 수 없습니다. 리디렉션된 위치에서만 반환됩니다.

서버가 보낼 때 발생합니다. 브라우저에 대한 302 응답 브라우저를 사용할 때 브라우저는 ajax 콜백 처리를 직접 수행하지 않고 먼저 302 리디렉션을 수행합니다. 즉, 응답 헤더에서 위치 정보를 읽은 다음 해당 위치의 URL에 요청합니다. 이 요청에 대한 응답을 받으면 ajax 콜백 처리를 수행합니다. 일반적인 프로세스는 다음과 같습니다.
jax -> 서버 -> 브라우저(리디렉션) -> ajax 콜백
프로그램의 경우, 302에서 반환된 리디렉션 URL은 서버에 해당 핸들러가 없으므로 ajax 콜백 함수에서 얻은 404 상태 코드는 200입니다. 해당 URL이 존재하는 경우 얻은 상태 코드는 200입니다.
따라서 Ajax 요청의 302 응답을 기반으로 location.href를 통해 리디렉션하려는 경우에는 불가능합니다.

어떻게 해결하나요?

방법 1
계속해서 ajax를 사용하고, 서버 측 코드를 수정하고, 다음 ASP.NET MVC 샘플 코드와 같이 원래 302 응답을 json 응답으로 변경합니다.

코드 복사 코드는 다음과 같습니다.

return Json(new { status = 302, location = "/oauth/respond" }) ;

Ajax 코드는 약간 수정될 수 있습니다.
코드 복사 코드는 다음과 같습니다.

$.ajax({
url: '/oauth/respond',
type: 'post',
data: data ,
dataType: 'json',
성공: 함수(데이터) {
                                                                       >

방법 2

ajax 대신 form을 사용하세요.

코드 복사

코드는 다음과 같습니다.

저는 이 문제를 이전에 철저하게 연구하지 않았고 몇 가지 함정을 밟았습니다. 이번에 연구한 결과 앞으로는 이 함정에서 벗어나야겠다는 생각이 듭니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.