jQuery 아약스 오류 함수


130

데이터를 페이지로 전달하는 ajax 호출이 있는데 값을 반환합니다.

페이지에서 성공적인 호출을 검색했지만 ASP에서 오류가 발생하도록 코딩했습니다. jquery에서 해당 오류를 어떻게 검색합니까?

예를 들면 다음과 같습니다.

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

내가 이해하지 못하는 오류 비트입니다. 함수에서 어떤 매개 변수를 넣어야하므로 서버에서 발생한 오류 메시지를 사용할 수 있습니다 .


오타가 있습니다. dataType그렇지 않습니다 datatype.
Alejandro Nava


7
@ alej27 : 문구는 다소 이상하지만 둘 다 사용할 수는 없지만 요청이 성공과 오류를 호출하지 않는다고 말합니다 (상호 배타적이므로).
마티 밴스

jQuery를 3.0으로 여기에 답변을 사용하여 관리가에 언급 deprecated 된 .error.success가 제거 된 것처럼 더 중요하게된다.
Mark Schultheiss

답변:


221

Ajax error함수 의 필수 매개 변수 는 다음 jqXHR, exception과 같이 사용할 수 있습니다.

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

데모 피들


매개 변수

jqXHR :

실제로 다음과 같은 오류 객체입니다.

아약스 오류 jqXHR 객체

다음 과 같은 함수 console.log내부 를 사용하여 자신의 브라우저 콘솔에서 이것을 볼 수도 있습니다 error.

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

우리는 status상태 = 404를 얻는다면 요청 된 페이지를 찾을 수 없다는 것을 의미하는 것처럼이 객체 의 속성을 사용하여 오류 코드를 얻습니다. 전혀 존재하지 않습니다. 해당 상태 코드를 기반으로 사용자를 로그인 페이지 또는 비즈니스 로직에 필요한 것으로 리디렉션 할 수 있습니다.

예외:

예외 유형을 표시하는 문자열 변수입니다. 따라서 404 오류가 발생하면 exception텍스트는 단순히 '오류'입니다. 마찬가지로 다른 예외 텍스트로 '시간 초과', '중지'가 나타날 수 있습니다.


중단 공지 사항 :jqXHR.success() , jqXHR.error()jqXHR.complete()콜백은 jQuery를 1.8로 사용되지 않습니다. 그들의 궁극적 인 제거를위한 코드를 준비하려면, 사용 jqXHR.done(), jqXHR.fail()jqXHR.always()대신.

따라서 jQuery 1.8 이상을 사용하는 경우 다음 과 같은 성공 및 오류 함수 논리를 업데이트해야합니다.

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

그것이 도움이되기를 바랍니다!


6
흥미롭게도 ajaxSetup을 사용하지 않는 것이 좋습니다. 참조 api.jquery.com/jquery.ajaxsetup
SleepyBoBos

1
@ palaѕн 더 이상 사용되지 않는 알림을 읽은 것 같습니다. 사용 중단 통지는 jqXHR 메소드 사용 중단에 대해 언급하고 있지만 위의 예에서 성공, 오류 및 완료 사용은 $ .ajax 메소드의 오브젝트 내에서 수행됩니다. 이것은 더 이상 사용되지 않으며 코드를 전환 할 필요가 없습니다. 그러나 메소드를 체인화하려는 경우이 스타일을 사용할 수 있습니다. "deprecation ..."을 읽으면 (아무 이유없이) 던져 버렸습니다. :-)
bchr02

jQuery 3.0부터는 더 이상 사용되지 않으며 .error, .success제거 될수록 더 중요해집니다
Mark Schultheiss

99

이 시도:

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

유효성 검사 오류에 대해 프론트 엔드에 알리려면 json을 반환하십시오.

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

ASP 스크립트는 다음을 반환해야합니다.

{"error": true}

1
textSttaus 및 errorThrown이란 무엇입니까? 설명해 주시겠습니까?
Annapurna

4

다음은 ASP 오류를 해결하는 방법입니다.

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }


2
          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

2

당신은 기능을 사용하고 있습니다

error(error) 

그러나 jquery는 실제로 세 가지 매개 변수가있는 함수를 찾고 있습니다.

error(jqXHR, textStatus, errorThrown)

두 개의 매개 변수를 더 추가해야합니다.

또한 : 위의 모든 의견에서 '더 이상 사용되지 않음'을 참조하십시오 :)

$.ajax("www.stackoverflow.com/api/whatever", {
    dataType:"JSON"
    data: { id=1, name='example' }
}).succes(function (result) {
    // use result
}).error(function (jqXHR, textStatus, errorThrown) {
    // handle error
});

4
두 개의 매개 변수를 더 추가해야합니다 . 너무 잘못되었습니다.
개발자

1
흠. 그게 전부라면-아무 말도하지 않겠습니까? 또는, 당신은 당신의 진술을 설명하고 실제로 도울 수 있습니다. 당신의 선택.
increddibelly

1
JavaScript에서 메소드가 있다고 가정하면 function myMethod (err) { alert(err); }다음과 같이 호출합니다 myMethod ("something is wrong", 500, some_object). 문제없이 작동합니다. 귀하의 진술에 따라, 이것은 메소드 서명이 인 경우에만 작동합니다 function myMethod (err, status, some_object). 위의 예를 잊어 버리십시오 success. 답변 에있는 이벤트 의 서명 은 실제로입니다 .success(data, status, xhr). 그러나 결과가 필요하면 일반적으로 결과를 바인딩 .success (data)하고 두 가지 작업을 모두 수행하십시오.
개발자

이 답변을 추가하여 어떤 가치를 더했습니까? IMO 귀하의 답변에 이전 답변에서 누락 된 정보가 없습니다. 당신이 한 것은 스택 에서이 질문을 다시 끌어 올리는 것입니다.
개발자

0

jquery.com에서 :

The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual 
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

글로벌 핸들러를 원하면 다음을 사용할 수 있습니다.

.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.