Ensure that AJAX requests are actually aborted in all browsers. Fix #7422.

This commit is contained in:
Colin Snover 2010-11-06 13:52:30 -05:00
parent a4df6945b8
commit e57b73a0ac
2 changed files with 9 additions and 5 deletions

View file

@ -463,10 +463,11 @@ jQuery.extend({
try { try {
var oldAbort = xhr.abort; var oldAbort = xhr.abort;
xhr.abort = function() { xhr.abort = function() {
// xhr.abort in IE7 is not a native JS function if ( xhr ) {
// and does not have a call property // oldAbort has no call property in IE7 so
if ( xhr && oldAbort.call ) { // just do it this way, which works in all
oldAbort.call( xhr ); // browsers
Function.prototype.call.call( oldAbort, xhr );
} }
onreadystatechange( "abort" ); onreadystatechange( "abort" );

View file

@ -137,7 +137,7 @@ test(".load()) - 404 error callbacks", function() {
}); });
test("jQuery.ajax() - abort", function() { test("jQuery.ajax() - abort", function() {
expect( 6 ); expect( 8 );
stop(); stop();
jQuery('#foo').ajaxStart(function(){ jQuery('#foo').ajaxStart(function(){
@ -157,7 +157,10 @@ test("jQuery.ajax() - abort", function() {
complete: function(){ ok(true, "complete"); } complete: function(){ ok(true, "complete"); }
}); });
equals( xhr.readyState, 1, "XHR readyState indicates successful dispatch" );
xhr.abort(); xhr.abort();
equals( xhr.readyState, 0, "XHR readyState indicates successful abortion" );
}); });
test("Ajax events with context", function() { test("Ajax events with context", function() {