jQuery : $ .ajax.error 메서드 내에서 HTTP 상태 코드를 얻는 방법은 무엇입니까?


81

AJAX 요청을 만들기 위해 jQuery를 사용하고 있습니다. HTTP 상태 코드가 400 오류인지 500 오류인지에 관계없이 다른 작업을 수행하고 싶습니다. 어떻게하면 되나요?

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    error: function(data){
        //get the status code
        if (code == 400) {
            alert('400 status code! user error');
        }
        if (code == 500) {
            alert('500 status code! server error');
        }
    },
});

최신 정보:

@GeorgeCummins는 응답 본문으로 작업하는 것이 "이상하게 보였습니다"라고 언급했습니다. 이런 일을 시도한 것은 이번이 처음입니다. 내 접근 방식이 모범 사례가 아닙니까? 무엇을 추천하나요? 여기에 또 다른 StackOverflow 질문을 만들었습니다 . 사용자 / 양식 유효성 검사 오류가있을 때 AJAX 요청에 어떤 응답 / 상태 코드를 보내야합니까?

답변:


102

jQuery 1.5를 사용하는 경우 statusCode작동합니다.

jQuery 1.4를 사용하는 경우 다음을 시도하십시오.

error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.status);
    alert(textStatus);
    alert(errorThrown);
}

첫 번째 경고의 상태 코드가 표시되어야합니다.


1
오, 제 문제가 보입니다. 나는 data그것이 오류 메소드에 전달되고 있다고 생각 했지만 실제로 jqXHRtextStatus, 및errorThrown
Andrew

5
처음에는 알지 못했던 다른 버전의 jQuery 간의 차이점을 언급했기 때문에 답변이 마음에 듭니다.
Andrew

2
jQ 2.x에서 예제를 사용하고 있으며 상태는 항상 0이고 textStatus는 항상 '오류'이며 오류 발생은 비어 있습니다. 어떤 아이디어? 내가 한 일 : 페이지가로드 된 후 서버를 돌려 어떤 일이 발생하는지 파악합니다.
Codebeat

상태 코드 419를 받았을 때 효과가 있었고 오류를 처리 할 수있었습니다.
disha

61

다음 statusCode설정을 사용하여 작업 맵을 만들어야 합니다.

$.ajax({
  statusCode: {
    400: function() {
      alert('400 status code! user error');
    },
    500: function() {
      alert('500 status code! server error');
    }
  }
});

참조 (스크롤 : 'statusCode')

편집 (댓글에 대한 응답으로)

응답 본문에 반환 된 데이터를 기반으로 조치를 취해야하는 경우 (이상하게 보임) error:대신 사용해야 합니다.statusCode:

error:function (xhr, ajaxOptions, thrownError){
    switch (xhr.status) {
        case 404:
             // Take action, referencing xhr.responseText as needed.
    }
} 

나는 그 경로를 시작했지만 데이터를 얻는 방법을 알 수 없었습니다. 응답 본문에 어떻게 액세스합니까?
Andrew

@Andrew : 응답 본문에 액세스해야하는 이유는 무엇입니까? 400 또는 500 오류가 발생할 때 유용한 데이터가 반환되기를 기대하고 있습니까?
George Cummins

예, 양식 유효성 검사 오류에 상태 코드 400을 사용하고 있습니다. (적절한 지 확실하지 않음)
Andrew

이 경우 400: function() {. alert ()를 제거하고 필요한 코드를 추가하기 만하면됩니다.
George Cummins 2011

응답 본문에는 오류 메시지의 html이 포함됩니다. 내에서 요청 본문에 액세스하려면 어떻게해야 400: function() {합니까?
Andrew

10

다른 해결책은 response.status 함수를 사용하는 것입니다. 이것은 ajax 호출에 의해 반환되는 http 상태를 제공합니다.

function checkHttpStatus(url) {     
    $.ajax({
        type: "GET",
        data: {},
        url: url,
        error: function(response) {
            alert(url + " returns a " + response.status);
        }, success() {
            alert(url + " Good link");
        }
    });
}

8

사용하다

   statusCode: {
    404: function() {
      alert('page not found');
    }
  }

-

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    statusCode: {
    404: function() {
      alert('page not found');
    },

    400: function() {
       alert('bad request');
   }
  }

});

2
예상치 못한 statusCode를 어떻게 잡을 수 있습니까?이 버전의 구문에 catch-all 또는 else 핸들러가 있습니까?
joedotnot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.