Simplified some of the logic for handling the ajax aborts, making sure that ajaxStop isn't called twice.

This commit is contained in:
jeresig 2010-01-12 10:59:50 -05:00
parent d60b197810
commit dd45c324ec

View file

@ -390,18 +390,19 @@ jQuery.extend({
// Wait for a response to come back // Wait for a response to come back
var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) { var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
// The request was aborted, clear the interval and decrement jQuery.active // The request was aborted
if ( !xhr || xhr.readyState === 0 ) { if ( !xhr || xhr.readyState === 0 ) {
// Opera doesn't call onreadystatechange before this point
// so we simulate the call
if ( !requestDone ) {
complete();
}
requestDone = true; requestDone = true;
if ( xhr ) { if ( xhr ) {
xhr.onreadystatechange = jQuery.noop; xhr.onreadystatechange = jQuery.noop;
} }
// Handle the global AJAX counter
if ( s.global && ! --jQuery.active ) {
jQuery.event.trigger( "ajaxStop" );
}
// The transfer is complete and the data is available, or the request timed out // The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) { } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true; requestDone = true;
@ -456,15 +457,11 @@ jQuery.extend({
xhr.abort = function() { xhr.abort = function() {
oldAbort.call( xhr ); oldAbort.call( xhr );
if ( !requestDone ) {
complete();
}
if ( xhr ) { if ( xhr ) {
xhr.onreadystatechange = null; xhr.readyState = 0;
} }
requestDone = true; onreadystatechange();
}; };
} catch(e) { } } catch(e) { }