전역 오류 처리를 정의하기 위한 jQuery의 $.ajax() 메서드 랩
이와 같은 질문에서 벗어나, 저는 jQuery의 $.ajax() 메서드를 한 위치에서 오류 처리를 제공할 수 있도록 포장하려고 합니다. 그러면 애플리케이션의 모든 원격 호출에서 자동으로 사용됩니다.
간단한 접근 방식은 $.get() 및 $.post()가 $.ajax()로 패사이드를 구현하는 방법과 유사한 새 이름을 만드는 것입니다.하지만 $.ajax()라는 이름을 다시 사용하여 표준 jQuery 구문을 사용하여 나머지 코드를 유지하고 오류 처리를 추가했다는 사실을 숨기고 싶습니다.이것이 현실적이고 달성하기 좋은 것입니까, 아니면 끔찍한 아이디어입니까?
편집: 지금까지의 응답은 .ajaxError()가 방법임을 나타냅니다.400 및 500 수준 오류가 발생할 것으로 알고 있습니다. 하지만 (이 이벤트 핸들러를 사용하거나 다른 방법으로) 302 리디렉션도 감지할 수 있는 방법이 있습니까?로그인 페이지로 리디렉션되는 응답을 처리하려고 하지만 XHR 요청일 때 해당 리디렉션을 가로채서 사용자가 작업을 자동으로 전달하지 않고 취소할 수 있도록 합니다.
를 확인해 보십시오.
$(document).ajaxError(function myErrorHandler(event, xhr, ajaxOptions, thrownError) {
alert("There was an ajax error!");
});
jQuery는 글로벌 핸들러를 연결하는 다양한 방법을 제공합니다.
편집에 응답하기 위해 다음을 사용하여 성공적인 Ajax 요청을 수신할 수 있습니다.$.ajaxSuccess
그리고 당신은 모든 것(성공과 실패)을 잡을 수 있습니다.$.ajaxComplete
에서 응답 코드를 얻을 수 있습니다.xhr
매개 변수, 유사
$(document).ajaxComplete(function myErrorHandler(event, xhr, ajaxOptions, thrownError) {
alert("Ajax request completed with response code " + xhr.status);
});
jQuery에는 $.ajaxSetup()이라는 편리한 메서드가 있으며, 이 메서드를 사용하면 이후에 오는 모든 jQuery 기반 AJAX 요청에 적용되는 옵션을 설정할 수 있습니다.이 방법을 기본 문서 준비 기능에 배치하면 모든 설정이 자동으로 한 위치에 나머지 기능에 적용됩니다.
$(function () {
//setup ajax error handling
$.ajaxSetup({
error: function (x, status, error) {
if (x.status == 403) {
alert("Sorry, your session has expired. Please login again to continue");
window.location.href ="/Account/Login";
}
else {
alert("An error occurred: " + status + "nError: " + error);
}
}
});
});
참조: https://cypressnorth.com/programming/global-ajax-error-handling-with-jquery/
사실, jQuery는 이 목적을 위해 후크를 제공합니다.바인딩된 모든 핸들러$ajaxError()
페이지의 Ajax 요청이 오류와 함께 완료되면 호출됩니다.선택기를 지정하면 참조할 수 있습니다.this
마음속에.ajaxError()
하고 아약스를 사용하기 위해 합니다.this
가자면키를 document
당신은 다음과 같은 것을 할 수 있습니다.
$(document).ajaxError(function(event, request, settings){
alert("Error requesting page: " + settings.url);
});
경우에 따라 로컬 오류 처리 기능이 호출되기 전에 글로벌 오류 처리를 수행할 수 있습니다.
이 예와 같은 방법을 사용하는 것이 저에게 가장 좋은 해결책이었습니다.
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
let error = options.error;
options.error = function (jqXHR, textStatus, errorThrown) {
// global error handling first
console.log('global ajax error');
// override local error handling if exists
if ($.isFunction(error)) {
return $.proxy(error, this)(jqXHR, textStatus, errorThrown);
}
};
});
안 좋은 생각인 것 같아요.하는 것 같아요.$.ajax
괜찮아요, 하지만 당신은 그것을 다시 시작하는 것에 대해 이야기하고 있습니다.이것을 깨닫지 못하는 사람은 누구나 예상치 못한 결과를 얻을 것입니다.
다른 사람들이 언급했듯이, 핸들러를 다음과 같이 바인딩합니다.$.ajaxError
가는 길입니다.
언급URL : https://stackoverflow.com/questions/4341933/wrap-jquerys-ajax-method-to-define-global-error-handling
'programing' 카테고리의 다른 글
ValueError: numpy.ndarray 크기가 변경되었습니다. 이진 비호환성을 나타낼 수 있습니다.C 헤더에서 88이 필요하고 PyObject에서 80이 필요합니다. (0) | 2023.08.29 |
---|---|
ASP를 사용하는 JSONP.NET 웹 API (0) | 2023.08.29 |
jQuery에서 창의 높이와 스크롤 위치를 어떻게 결정합니까? (0) | 2023.08.29 |
특정 셀을 잠그지만 필터링 및 정렬을 허용하는 방법 (0) | 2023.08.29 |
JQuery 특정 클래스 접두사를 사용하여 첫 번째 부모 요소 찾기 (0) | 2023.08.24 |