jQuery의 ajaxSend 및 ajaxStop을 사용하여 ajax 요청이 활성화 될 때마다 회 전자를 표시했습니다. 일부 플러그인이 Ajax 요청을 중단하면 AjaxStop이 트리거되지 않고 페이지가 새로 고쳐질 때까지 트리거되지 않습니다. 중단 된 요청은 여전히 jQuery로 계산됩니다. ajaxStop 트리거를 만들 수 있습니까? 아니면 더 좋은 방법이 있습니까?중단 된 호출이있을 때 트리거 jQuery의 ajaxStop 이벤트
3
A
답변
3
글쎄 나는 내가 아주 좋아하는 방식을 알아 냈다. XMLHttpRequest abort 메서드에 패치를 적용하여 jQuery의 ajax 카운터를 줄이고 마지막 요청 인 경우 처리기를 트리거합니다. 아직 브라우저에서 얼마나 잘 작동하는지 확신 할 수 없습니다.
var old_abort = XMLHttpRequest.prototype.abort;
XMLHttpRequest.prototype.abort = function(){
jQuery.proxy(old_abort, this)();
if (jQuery.active-- === 1)
jQuery.event.trigger("ajaxStop");
};
1
내가 대신 complete 이벤트를 사용합니다 - 무슨 일이 있어도 실행하지 그 :
이 이벤트는 관계없이 요청 이 성공 또는 아니었다면의 전화 입니다
전체 (로컬 이벤트). 동기 요청의 경우에도 은 항상 완전한 콜백을 수신합니다 ( ).
$.ajax({
complete: function(){
// hide your spinner
}
});
당신이 있는지 필요가없는 경우,하지만 당신은 ajaxStop 이벤트를 트리거 할 수 있습니다. $(this).trigger('ajaxStop');
2
에만 dataType와 = "JSON"에 대한, jQuery를 1.5.1에 http://forum.jquery.com/topic/ajaxstart-not-fired-when-jquery-active-changes-from-0-to-1
업그레이드를 참조하거나 위의 제이크가 게시 패치를 적용 jQuery를 1.4.2에서 문제가 될 것으로 보인다. 또한 패치를 다음과 같이 수정하여 사용 사례에 맞게 올바르게 수정해야합니다.
f_abort = XMLHttpRequest.prototype.abort;
XMLHttpRequest.prototype.abort = function() {
$.proxy(f_abort, this)();
if ($.active === 1) {
$.event.trigger("ajaxStop");
$.active = 0;
} else if ($.active > 1) {
$.active--;
}
};
아약스 이벤트가 완료 될 때마다 'complete'가 실행됩니다. 즉, 내 회 전자를 숨기려면이를 사용하면 다른 사람이 계속 실행중인 경우에도 하나의 요청이 완료되면 숨길 수 있습니다. – Jake