From e57b73a0ac6f8fd0cdbbe7d43f1c7e198f475337 Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Sat, 6 Nov 2010 13:52:30 -0500 Subject: [PATCH] Ensure that AJAX requests are actually aborted in all browsers. Fix #7422. --- src/ajax.js | 9 +++++---- test/unit/ajax.js | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index ff293da6..690bcb53 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -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" ); diff --git a/test/unit/ajax.js b/test/unit/ajax.js index b2e51fbc..4ce14c24 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -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() {