X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=90dc350fc922b6cf0e4dfab15da4d1e53a213ad2;hb=cc9dbd06e5ffa62223e1f2e3dbbdcbbcb2bf5e11;hp=690bcb53bf175b6b651a764802b34ab6362de934;hpb=e57b73a0ac6f8fd0cdbbe7d43f1c7e198f475337;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 690bcb5..90dc350 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -195,10 +195,24 @@ 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); - s.url = s.url.replace( rhash, "" ); + // toString fixes people passing a window.location or + // document.location to $.ajax, which worked in 1.4.2 and + // earlier (bug #7531). It should be removed in 1.5. + s.url = ("" + s.url).replace( rhash, "" ); // Use original (not extended) context object if it was provided s.context = origSettings && origSettings.context != null ? origSettings.context : s; @@ -261,7 +275,7 @@ jQuery.extend({ }; } - if ( s.dataType === "script" && s.cache === null ) { + if ( s.dataType === "script" && s.cache === undefined ) { s.cache = false; } @@ -403,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" : @@ -451,10 +464,7 @@ jQuery.extend({ xhr.abort(); } - // Stop memory leaks - if ( s.async ) { - xhr = null; - } + cleanup(); } }; @@ -507,11 +517,12 @@ jQuery.extend({ // Serialize an array of form elements or a set of // key/values into a query string param: function( a, traditional ) { - var s = [], add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction(value) ? value() : value; - s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); - }; + var s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : value; + s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; // Set traditional to true for jQuery <= 1.3.2 behavior. if ( traditional === undefined ) {