programing

jQuery agax - statusCode() 콜백이 호출될 때 오류() 콜백 방지

minimums 2023. 8. 31. 23:45
반응형

jQuery agax - statusCode() 콜백이 호출될 때 오류() 콜백 방지

백엔드 서비스에 연결하기 위해 jQuery.jax()를 사용하고 있습니다.error() 핸들러와 statusCode() 핸들러를 구성했습니다.둘 다 잘 작동하지만, statusCode 핸들러가 실행되면 오류 핸들러도 실행됩니다(실제로 오류 핸들러가 먼저 실행됨).저는 이런 일이 일어나지 않았으면 좋겠어요.오류 처리기 코드를 해킹하지 않아도 가능하다고 생각합니다.

내 코드는 다음과 같습니다.

$.ajax({
    ...
    error: function(...) { 
        // process a general type of error here
    },
    statusCode: {
        401: function() {
            // process a specific authentication failure
        }
    }                 
});

그러면 HTTP 상태 코드가 401일 때 오류() 핸들러가 발생하는 것을 방지하려면 어떻게 해야 합니까?

일부러 읽어주셔서 감사합니다!

오류 콜백 내부의 상태 코드를 쉽게 확인할 수 있습니다.첫 번째 매개 변수는 다음과 같아야 합니다.XMLHttpRequest(또는)jqHXRjQuery) 개체 버전에 따라 다릅니다.그에 따라 오류 핸들의 상태 코드에 대한 'status' 속성을 확인합니다.

예.

error: function(a, b, c){
  if(a.status != 401){
    // handle other errors except authentication

  }
}

해킹 없이jQuery.ajax,그럴수는 없어요.저에게 jQuery의 아약스 방법은 도서관의 약점 중 하나입니다.좀 더 합리적인 요청 처리를 위해 슈퍼에이전트나 다른 독립 실행형 라이브러리를 조사하는 것이 좋습니다.

일반 이벤트 처리기를 실행하지 않을 상태 코드를 하드 코딩해야 하는 이전 해결 방법을 개선합니다.

제 생각에는 Send가 다른 목적으로 덮어쓰기되기 전에 오류 처리기를 편집하는 것이 더 안전합니다. 따라서 이러한 호출에 대해 일반 오류 처리기를 실수로 실행할 수 있습니다. (누군가가 오류 콜백을 덮어쓰면 오류 처리에 영향을 줄 것으로 예상되며, Send callback을 보내기 전에 수정하면 그렇지 않습니다.)

따라서 다음과 같은 이점을 얻을 수 있습니다.

function ajaxError (jqXHR, textStatus, errorThrown)
{
    if (jqXHR.status in this.statusCode) return;
    // Handle generic events here.

}

ajaxSetup 및 beforeSend를 사용하여 Ajax 요청의 오류 처리기를 자동으로 조정할 수 있습니다.

$.ajaxSetup({
  beforeSend: function(jqXHR, settings) {
    if (typeof settings.error === 'function') {
      var errorfunc = settings.error;
      settings.error = function(jqXHR2, textStatus, errorThrown) {
        if (jqXHR2.status !== 401) errorfunc(jqXHR2, textStatus, errorThrown);
      };
    }
  }
});

저 같은 경우에는 효과가 있습니다.

이 게시물에서 오류 방법으로 상태 코드를 처리하는 것에 대한 답변을 확인하십시오: jquery agax 상태 코드를 가져오는 방법.

언급URL : https://stackoverflow.com/questions/9465067/jquery-ajax-avoiding-error-callback-when-statuscode-callback-invoked

반응형