From dd45c324ecf12732185656de89b40d47e3b9d3ad Mon Sep 17 00:00:00 2001 From: jeresig Date: Tue, 12 Jan 2010 10:59:50 -0500 Subject: [PATCH] Simplified some of the logic for handling the ajax aborts, making sure that ajaxStop isn't called twice. --- src/ajax.js | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index e9b02fc..83e5bdc 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -390,18 +390,19 @@ jQuery.extend({ // Wait for a response to come back 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 ) { + // Opera doesn't call onreadystatechange before this point + // so we simulate the call + if ( !requestDone ) { + complete(); + } + requestDone = true; if ( xhr ) { 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 } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) { requestDone = true; @@ -456,15 +457,11 @@ jQuery.extend({ xhr.abort = function() { oldAbort.call( xhr ); - if ( !requestDone ) { - complete(); - } - if ( xhr ) { - xhr.onreadystatechange = null; + xhr.readyState = 0; } - requestDone = true; + onreadystatechange(); }; } catch(e) { } -- 1.7.10.4