programing

요청에 대해 일부 jQuery 글로벌 Ajax 이벤트 처리기 사용 안 함

newsource 2023. 4. 5. 21:59

요청에 대해 일부 jQuery 글로벌 Ajax 이벤트 처리기 사용 안 함

글로벌 Ajax 이벤트 핸들러가 정의되어 있다고 가정합니다(ajaxStart, ajaxStop 및 ajaxError).보통은 문제 없습니다만, 한 가지 요청으로 ajaxError 핸들러를 디세블로 하면서도 평소대로 ajaxStart 핸들러와 ajaxStop 핸들러를 실행하고 싶습니다.jQuery ajax 함수 문서에서는 "global" 파라미터를 false로 설정하고 $.ajax 함수에 전달하여 모든 글로벌 Ajax 이벤트핸들러를 디세블로 할 수 있지만 일부 글로벌핸들러를 디세블로 할 수 있는 방법은 기재되어 있지 않습니다.

ajaxError 함수에 전달된 ajaxSettings 객체의 "url" 속성에 대한 테스트를 수행함으로써 ajaxError 핸들러를 방지할 수 있지만, 이는 다소 서투른 것 같습니다.여기 $.ajax 함수가 호출된 위치를 보고 있는 누군가가 알 수 있는 ajaxError 함수의 실행을 비활성화하는 방법을 알고 있는 사람이 있습니까?

보고 싶은 사람이 있다면 간단한 예를 들어줄 수 있어요.

그것은 가능하고 어렵지 않다.

글로벌 에러 핸들러를 설정하기만 하면 됩니다(.ajaxErrorjQuery가 제공할 수 있는 몇 가지 파라미터를 수신하려면 다음 절차를 따릅니다.

$("div.log").ajaxError(function(evt, xhr, settings) {
    if(settings.suppressErrors) {
        return;
    }

    // Normal processing
});

그 후, 추가 가능합니다.suppressErrors: trueAJAX 요구의 설정으로 이행합니다.또, 실패했을 경우, 에러 핸들러는 통상의 조작을 실시하지 않고 돌아옵니다.

실제 상황 보기.

많은 종류의 jquery/source https://github.com/jquery/jquery/blob/master/src/ajax.js#L579-582의 if 문을 보면 jquery 파라미터만으로는 문제를 해결할 수 없습니다.

제안사항은 다음과 같습니다.

  • Vaibhav Gupta가 말한 것처럼 글로벌을 false로 설정합니다.

  • 글로벌 핸들러를 특정 ajax 콜의 로컬에 매핑하고 $.event.trigger 메서드를 사용하여 글로벌이벤트를 트리거합니다

샘플:

$.ajax({
    url: "test.html",
    global: false,
    beforeSend: function(){$.event.trigger('ajaxStart');},
    complete: function(){$.event.trigger('ajaxStop');},
    error: your_error_handler
});

사용하려고 하다global: falseAjax 요청에 다음과 같이 입력합니다.

 $.ajax({
   url: "test.html",
   global: false,
   // ...
 });

출처: http://docs.jquery.com/Ajax_Events

글로벌 이벤트를 찾습니다.

설정할 수 있습니다.$.event.global.ajaxError로.false글로벌 오류 콜백을 일시적으로 호출하지 않도록 설정합니다.를 사용합니다.error그리고.complete플래그를 설정하기 위한 특별한 요청 콜백:

$.ajax({
    url: 'some.domain.com/',
}).error(function(jXHR){
    // Disable global error logging
    $.event.global.ajaxError = false;
}).complete(function(){
    // Enable global error logging
    $.event.global.ajaxError = true;
});

를 jsFiddle에서 사용할 수 있습니다.

제시되는 한, 저는 존의 제안을 여전히 선호한다는 것을 덧붙이고 싶습니다.이 방법에서는 실수로 글로벌핸들러가 디세블이 되려면 플래그를 1개 이상 잊어버릴 수 있는2개소에 설정해야 합니다.다른 이유는 Jon의 기술이 일부 내부 플래그를 설정할 수 없는 jQuery 릴리즈에서 작동하도록 보장해야 한다는 것입니다.

언급URL : https://stackoverflow.com/questions/7436195/disabling-some-jquery-global-ajax-event-handlers-for-a-request