]> source.dussan.org Git - jquery.git/commitdiff
Ensure that AJAX requests are actually aborted in all browsers. Fix #7422. 83/head
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 ff293da6acff9280097a5fcaba2c9e35e87d5032..690bcb53bf175b6b651a764802b34ab6362de934 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 b2e51fbcf3bcf573cd5f74ddff49fecde583edb3..4ce14c24cf6bd3d046f8e287d440f667b6cce3bc 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() {