2014-02-27 3 views
4

내가 AJAX 오류에 대한 글로벌 오류 처리기가 호출되고. complete 콜백 실행을 중지하려면 어떻게해야합니까? (내 AJAX 요청은 라이브러리 내에서 이루어 지므로 매개 변수를 정의 할 수 없습니다.)방지 다음 이벤트 핸들러/콜백

UPDATE :

jqxdr.abort()를 호출하면 일을하지 않습니다.

+0

[jQuery에서 모든 활성 아약스 요청 중지] 가능한 복제본 (http://stackoverflow.com/questions/1802936/stop-all-active-ajax-requests-in-jquery) –

+0

나는 당신이 할 수 있다고 생각하지 않는다. 왜냐하면 ajaxError 핸들러가 호출되기 전에 complete 핸들러가 호출되기 때문입니다. http://jsfiddle.net/arunpjohny/mM87r/1/ –

+0

@Roko이 질문은 중복 된 것으로 생각하지 않습니다. 적어도이 문제는 상당히 다릅니다. – Alexey

답변

2

당신은 당신의 핸들러에서 이것을 시도 할 수 있습니다 :

function ajaxErrorHandler(event, jqxhr, settings, exception) { 

    // ... 

    // How to stop further processing of the AJAX response here? 
    event.stopPropagation(); 
} 

그것은 부모의 핸들러에 이벤트 스톤 전파를 중지합니다. jQuery doc

completeajaxComplete 이벤트의 목적에 관계없이 요청 상태 (성공 또는 오류)의 호출하는 것입니다

+0

답변 해 주셔서 감사합니다. 그것은 나를 위해 작동하지 않습니다. 'event.stopPropagation()'다음에 실행되는 코드가 있습니다. 이 콜백이 어떤 콜백/이벤트에 연결되는지는 알 수 없습니다. – Alexey

+0

다른 이벤트 핸들러가 ajaxComplete 이벤트에 첨부 될 수 있습니다. $ .ajaxSetup()을 사용하고 전역 변수를 false로 선언하고 핸들러를 등록해야하는 설정 객체를 제공 할 수 있습니다. –

+0

나는이 코드가 로컬'complete' 콜백에 붙어 있다고 생각한다. 'jQuery.ajax()'매개 변수에 정의 된 매개 변수. – Alexey

1

여기 트리거되고 아약스 이벤트의 전체 목록입니다. 실행이 ajaxErrorHandler에 설정된 일부 조건에 따라 다르면 더 이상 complete에 바인딩해서는 안됩니다. 글로벌 이벤트 핸들러에 evt.stopPropagation()evt.stopImmediatePropagation()를 호출하는 콜백 실행을 방지 할 수 있도록

당신은, errorsuccess 한 번에 한 번 현재 complete 콜백을 연결할 수 있습니다.


succes에/실패 이벤트 승계를 처리하는 jQuery 코드는 here입니다.

보시다시피 2 개의 지연된 객체 (resolved/rejected 부분을 처리하는 객체, completed 부분을 처리하는 객체) 및 두 개의 개별 이벤트 트리거가 포함됩니다.

이 흐름을 완전히 중단시키는 방법은 없습니다. ajaxError 이벤트의 처리는 다음 completeajaxComplete 이벤트와 완전히 별개입니다.

+0

응답 해 주셔서 감사합니다. 내 AJAX 요청은 JavaScript 라이브러리에 의해 만들어지며 제한적인 통제가 있습니다. 하지만 코드를 완전히 제어하더라도 전역 적으로 'ajaxError' (오류 페이지로 리디렉션)에서 가장 중요한 오류를 처리하고 싶습니다. 페이지를 새로 고치기 전에 다른 것이 실행될 수 있다는 내용의 싸움없이 . – Alexey

+0

어떻게 "오류 페이지로 리디렉션"합니까? 'window.location.assign (url)'을 사용하면 현재 페이지의 모든 자바 스크립트 실행을 중단합니다. – LeGEC

+0

방금 ​​시도했습니다. 자바 스크립트를 중단하지 않습니다. 'window.location.assign (url)'바로 다음 행도 실행됩니다. 페이지의 모든 JavaScript를 중지하는 방법을 찾으면 문제가 해결 될 것입니다. – Alexey