Skip to content
Permalink
Browse files

Make sure that Opera fires events after an aborted Ajax attempt. Fixe…

…s #5787.
  • Loading branch information
jeresig committed Jan 12, 2010
1 parent 4151dde commit 7afe6dcc0837ac00cea7fbb7de6fb95b745148c2
Showing with 20 additions and 2 deletions.
  1. +1 −1 Makefile
  2. +19 −1 src/ajax.js
@@ -57,7 +57,7 @@ ${JQ}: ${MODULES}
sed 's/Date:./&'"${DATE}"'/' | \
${VER} > ${JQ};

selector: init
selector:
@@echo "Building selector code from Sizzle"
@@sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js

@@ -393,7 +393,9 @@ jQuery.extend({
// The request was aborted, clear the interval and decrement jQuery.active
if ( !xhr || xhr.readyState === 0 ) {
requestDone = true;
xhr.onreadystatechange = jQuery.noop;
if ( xhr ) {
xhr.onreadystatechange = jQuery.noop;
}

// Handle the global AJAX counter
if ( s.global && ! --jQuery.active ) {
@@ -447,6 +449,22 @@ jQuery.extend({
}
};

// Override the abort handler, if we can (IE doesn't allow it, but that's OK)
// Opera doesn't fire onreadystatechange at all on abort
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
oldAbort.call( xhr );
if ( xhr ) {
xhr.readyState = 0;
}
if ( !requestDone ) {
complete();
}
onreadystatechange();
};
} catch(e) { }

// Timeout checker
if ( s.async && s.timeout > 0 ) {
setTimeout(function() {

0 comments on commit 7afe6dc

Please sign in to comment.
You can’t perform that action at this time.