diff options
author | John Resig <jeresig@gmail.com> | 2010-12-06 17:23:08 -0500 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2010-12-06 17:23:08 -0500 |
commit | 9759e9f6bb9b85a95e0254e6b7b2ed861aee8c84 (patch) | |
tree | 2ae1ea9ab5b159af2670eb629c535d1cb1dae160 /src/ajax.js | |
parent | 6c6812492858066043dd63525d94e2d334c96c3f (diff) | |
parent | 238ac5a0aa25e7fb4fead7a56b92951817446127 (diff) | |
download | jquery-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.js | 19 |
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(); } }; |