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
19
src/ajax.js
19
src/ajax.js
|
@ -195,6 +195,17 @@ jQuery.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
ajax: function( origSettings ) {
|
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),
|
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
|
||||||
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
|
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
|
||||||
|
|
||||||
|
@ -403,13 +414,12 @@ jQuery.extend({
|
||||||
|
|
||||||
requestDone = true;
|
requestDone = true;
|
||||||
if ( xhr ) {
|
if ( xhr ) {
|
||||||
xhr.onreadystatechange = jQuery.noop;
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
// The transfer is complete and the data is available, or the request timed out
|
// The transfer is complete and the data is available, or the request timed out
|
||||||
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
|
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
|
||||||
requestDone = true;
|
requestDone = true;
|
||||||
xhr.onreadystatechange = jQuery.noop;
|
|
||||||
|
|
||||||
status = isTimeout === "timeout" ?
|
status = isTimeout === "timeout" ?
|
||||||
"timeout" :
|
"timeout" :
|
||||||
|
@ -451,10 +461,7 @@ jQuery.extend({
|
||||||
xhr.abort();
|
xhr.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop memory leaks
|
cleanup();
|
||||||
if ( s.async ) {
|
|
||||||
xhr = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue