Ensure that AJAX requests are actually aborted in all browsers. Fix #7422.
authorColin Snover <github.com@zetafleet.com>
Sat, 6 Nov 2010 18:52:30 +0000 (13:52 -0500)
committerColin Snover <github.com@zetafleet.com>
Sat, 6 Nov 2010 18:52:30 +0000 (13:52 -0500)
src/ajax.js
test/unit/ajax.js

index ff293da..690bcb5 100644 (file)
@@ -463,10 +463,11 @@ jQuery.extend({
                try {
                        var oldAbort = xhr.abort;
                        xhr.abort = function() {
-                               // xhr.abort in IE7 is not a native JS function
-                               // and does not have a call property
-                               if ( xhr && oldAbort.call ) {
-                                       oldAbort.call( xhr );
+                               if ( xhr ) {
+                                       // oldAbort has no call property in IE7 so
+                                       // just do it this way, which works in all
+                                       // browsers
+                                       Function.prototype.call.call( oldAbort, xhr );
                                }
 
                                onreadystatechange( "abort" );
index b2e51fb..4ce14c2 100644 (file)
@@ -137,7 +137,7 @@ test(".load()) - 404 error callbacks", function() {
 });
 
 test("jQuery.ajax() - abort", function() {
-       expect( 6 );
+       expect( 8 );
        stop();
 
        jQuery('#foo').ajaxStart(function(){
@@ -157,7 +157,10 @@ test("jQuery.ajax() - abort", function() {
                complete: function(){ ok(true, "complete"); }
        });
 
+       equals( xhr.readyState, 1, "XHR readyState indicates successful dispatch" );
+
        xhr.abort();
+       equals( xhr.readyState, 0, "XHR readyState indicates successful abortion" );
 });
 
 test("Ajax events with context", function() {