programing

이벤트 핸들러 이전에 jQuery에서 ajax 응답을 가로채려면 어떻게 해야 합니까?

megabox 2023. 9. 26. 22:14
반응형

이벤트 핸들러 이전에 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

반응형