aboutsummaryrefslogtreecommitdiffstats
path: root/src/ajax.js
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2010-12-06 17:23:08 -0500
committerJohn Resig <jeresig@gmail.com>2010-12-06 17:23:08 -0500
commit9759e9f6bb9b85a95e0254e6b7b2ed861aee8c84 (patch)
tree2ae1ea9ab5b159af2670eb629c535d1cb1dae160 /src/ajax.js
parent6c6812492858066043dd63525d94e2d334c96c3f (diff)
parent238ac5a0aa25e7fb4fead7a56b92951817446127 (diff)
downloadjquery-9759e9f6bb9b85a95e0254e6b7b2ed861aee8c84.tar.gz
jquery-9759e9f6bb9b85a95e0254e6b7b2ed861aee8c84.zip
Merge branch 'bug6242' of https://github.com/csnover/jquery into csnover-bug6242
Diffstat (limited to 'src/ajax.js')
-rw-r--r--src/ajax.js19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/ajax.js b/src/ajax.js
index d20ad76bc..90dc350fc 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -195,6 +195,17 @@ jQuery.extend({
},
ajax: function( origSettings ) {
+ // IE8 leaks a lot when we've set abort, and IE6-8 a little
+ // when we have set onreadystatechange. Bug #6242
+ // XXX IE7 still leaks when abort is called, no matter what
+ // we do
+ function cleanup() {
+ // IE6 will throw an error setting xhr.abort
+ try {
+ xhr.abort = xhr.onreadystatechange = jQuery.noop;
+ } catch(e) {}
+ }
+
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
@@ -406,13 +417,12 @@ jQuery.extend({
requestDone = true;
if ( xhr ) {
- xhr.onreadystatechange = jQuery.noop;
+ cleanup();
}
// The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
- xhr.onreadystatechange = jQuery.noop;
status = isTimeout === "timeout" ?
"timeout" :
@@ -454,10 +464,7 @@ jQuery.extend({
xhr.abort();
}
- // Stop memory leaks
- if ( s.async ) {
- xhr = null;
- }
+ cleanup();
}
};