From: Oleg Date: Tue, 1 May 2012 18:47:14 +0000 (-0400) Subject: jQuery.fn.load optimization X-Git-Tag: 1.8b1~172 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=95291b44e64d86b05fceecb7e08b5d444cbbdb85;p=jquery.git jQuery.fn.load optimization --- diff --git a/src/ajax.js b/src/ajax.js index b5d4865ff..84a2c0432 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -158,72 +158,63 @@ jQuery.fn.extend({ load: function( url, params, callback ) { if ( typeof url !== "string" && _load ) { return _load.apply( this, arguments ); + } // Don't do a request if no elements are being requested - } else if ( !this.length ) { + if ( !this.length ) { return this; } - var off = url.indexOf( " " ); + var selector, type, + self = this, + off = url.indexOf(" "); + if ( off >= 0 ) { - var selector = url.slice( off, url.length ); + selector = url.slice( off, url.length ); url = url.slice( 0, off ); } - // Default to a GET request - var type = "GET"; + // If it's a function + if ( jQuery.isFunction( params ) ) { - // If the second parameter was provided - if ( params ) { - // If it's a function - if ( jQuery.isFunction( params ) ) { - // We assume that it's the callback - callback = params; - params = undefined; + // We assume that it's the callback + callback = params; + params = undefined; - // Otherwise, build a param string - } else if ( typeof params === "object" ) { - type = "POST"; - } + // Otherwise, build a param string + } else if ( typeof params === "object" ) { + type = "POST"; } - var self = this; - // Request the remote document jQuery.ajax({ url: url, + + // if "type" variable is undefined, then "GET" method will be used type: type, dataType: "html", - data: params, - // Complete callback (responseText is used internally) - complete: function( jqXHR, status, responseText ) { - // Store the response as specified by the jqXHR object - responseText = jqXHR.responseText; - // If successful, inject the HTML into all the matched elements - if ( jqXHR.isResolved() ) { - // #4825: Get the actual response in case - // a dataFilter is present in ajaxSettings - jqXHR.done(function( r ) { - responseText = r; - }); - // See if a selector was specified - self.html( selector ? - // Create a dummy div to hold the results - jQuery("
") - // inject the contents of the document in, removing the scripts - // to avoid any 'Permission Denied' errors in IE - .append(responseText.replace(rscript, "")) - - // Locate the specified elements - .find(selector) : - - // If not, just inject the full result - responseText ); - } + data: params + }).done(function( responseText ) { - if ( callback ) { - self.each( callback, [ responseText, status, jqXHR ] ); - } + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("
") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }).always(function() { + if ( callback ) { + self.each( callback, arguments ); } });