Fix memory leaks in IE caused by the custom abort function of $.ajax. Fixes bug #6242.
This commit is contained in:
parent
e1d6edf822
commit
238ac5a0aa
1 changed files with 13 additions and 6 deletions
19
src/ajax.js
19
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);
|
||||
|
||||
|
@ -403,13 +414,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" :
|
||||
|
@ -451,10 +461,7 @@ jQuery.extend({
|
|||
xhr.abort();
|
||||
}
|
||||
|
||||
// Stop memory leaks
|
||||
if ( s.async ) {
|
||||
xhr = null;
|
||||
}
|
||||
cleanup();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue