Make sure that Opera fires events after an aborted Ajax attempt. Fixes #5787.
This commit is contained in:
parent
4151ddef9d
commit
7afe6dcc08
2 changed files with 20 additions and 2 deletions
2
Makefile
2
Makefile
|
@ -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
|
||||
|
||||
|
|
20
src/ajax.js
20
src/ajax.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() {
|
||||
|
|
Loading…
Reference in a new issue