이벤트 핸들러 이전에 jQuery에서 ajax 응답을 가로채려면 어떻게 해야 합니까?
특정 이벤트 핸들러가 응답을 받기 전에 서버의 응답을 가로채고 처리할 수 있도록 모든 AJAX 요청에 대해 글로벌 이벤트 핸들러를 등록하고 싶습니다.
예를 들어 내 코드에는 다음과 같은 것이 있을 수 있습니다.
$("#placeholder").load("/fragments/userpics");
예를 들어 401 응답이 반환된 경우 로그인 상자를 표시하거나 503 응답이 있는 경우 다시 시도할 수 있도록 "이전" 이벤트 핸들러를 등록하고 싶습니다.
저는 여기서 이런 일을 할 줄 알았는데, 이벤트 핸들러 이후에야 작동이 되는 것 같습니다.
업데이트: 좋아요, 지금까지 @genesis의 도움으로 얻은 것은 다음과 같습니다.
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var success = options.success;
options.success = function(data, textStatus, jqXHR) {
// override success handling
if(typeof(success) === "function") return success(data, textStatus, jqXHR);
};
var error = options.error;
options.error = function(jqXHR, textStatus, errorThrown) {
// override error handling
if(typeof(error) === "function") return error(jqXHR, textStatus, errorThrown);
};
});
테스트를 좀 해본 후에, 저도 재지정을 해야 할 것 같습니다.options.complete
.
그러나 이벤트를 jqXHR 개체에 직접 연결하고 변경할 수도 있기 때문에 여전히 모든 기본을 포함하지는 않습니다.options
이 경우에는 도움이 되지 않을 겁니다
조언 좀 해주세요.
이벤트 핸들러 이전에 서버에서 돌아오는 데이터를 처리하려면 datafilter:
jQuery.ajaxSetup({
dataFilter: function (data, type) {
//modify the data
return data;
}
});
사용자 지정 Ajax 옵션을 처리하거나 각 요청이 전송되기 전에 $.ajax()에서 처리하기 전에 기존 옵션을 수정합니다.
http://api.jquery.com/jQuery.ajaxPrefilter/
.load()에도 적용 가능할 것입니다.
Hugo Forte가 정답을 알고 있습니다. 이벤트 핸들러가 호출되기 전에 Ajax 응답을 가로챌 수 있는 유일한 방법은 dataFilter를 사용하는 것입니다.
코드 리팩토링을 너무 많이 하지 않고 클라이언트 측에서 ajax 응답 리다이렉트를 처리하기 위해 오늘 이 작업을 사용해야 했습니다.
$.ajaxSetup({
dataFilter: function (data, type) {
if (data !== "" && data === "NOAUTH") {
window.location = '/';
}
return data;
}
});
언급URL : https://stackoverflow.com/questions/7256207/how-can-i-intercept-ajax-responses-in-jquery-before-the-event-handler
'programing' 카테고리의 다른 글
MySQL 쿼리 캐싱을 비활성화하는 방법 (0) | 2023.09.26 |
---|---|
길이가 있는 안전하지 않은 포인터를 Swift Array 유형으로 변환 (0) | 2023.09.26 |
javax.xml.bind.모듈 경로 또는 클래스 경로에서 JAXB-API의 JAXB 예외 구현을 찾을 수 없습니다. (0) | 2023.09.26 |
사각형 괄호를 사용하여 Pandas 열에 액세스 vs 점(속성 같은) 사용 (0) | 2023.09.26 |
여러 PHP 페이지에 걸쳐 AJAX 함수의 채워진 변수로 SQL 쿼리 업데이트 (0) | 2023.09.26 |