},
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);
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" :
xhr.abort();
}
- // Stop memory leaks
- if ( s.async ) {
- xhr = null;
- }
+ cleanup();
}
};