Make sure that Opera fires events after an aborted Ajax attempt. Fixes #5787.

This commit is contained in:
jeresig 2010-01-12 10:31:51 -05:00
parent 4151ddef9d
commit 7afe6dcc08
2 changed files with 20 additions and 2 deletions

View file

@ -57,7 +57,7 @@ ${JQ}: ${MODULES}
sed 's/Date:./&'"${DATE}"'/' | \ sed 's/Date:./&'"${DATE}"'/' | \
${VER} > ${JQ}; ${VER} > ${JQ};
selector: init selector:
@@echo "Building selector code from Sizzle" @@echo "Building selector code from Sizzle"
@@sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js @@sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js

View file

@ -393,7 +393,9 @@ jQuery.extend({
// The request was aborted, clear the interval and decrement jQuery.active // The request was aborted, clear the interval and decrement jQuery.active
if ( !xhr || xhr.readyState === 0 ) { if ( !xhr || xhr.readyState === 0 ) {
requestDone = true; requestDone = true;
if ( xhr ) {
xhr.onreadystatechange = jQuery.noop; xhr.onreadystatechange = jQuery.noop;
}
// Handle the global AJAX counter // Handle the global AJAX counter
if ( s.global && ! --jQuery.active ) { 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 // Timeout checker
if ( s.async && s.timeout > 0 ) { if ( s.async && s.timeout > 0 ) {
setTimeout(function() { setTimeout(function() {