X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax.js;h=59c231c9b33e52c73c6f69d17c57db35b1ae173e;hb=ddb86f8d5bd1bd21b2beeeea55baf505b47dfed5;hp=1cb7ee5b16793305d06ede2be81f622fc51fcbd3;hpb=50cf4351a6c4b0031f268279b093e38850b90cd6;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 1cb7ee5..59c231c 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -15,6 +15,10 @@ jQuery.fn.extend({ load: function( url, params, callback ) { if ( typeof url !== "string" ) { return this._load( url ); + + // Don't do a request if no elements are being requested + } else if ( !this.length ) { + return this; } var off = url.indexOf(" "); @@ -194,7 +198,7 @@ jQuery.extend({ ajax: function( s ) { // Extend the settings, but re-extend 's' so that it can be // checked again later (in the test suite, specifically) - s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s)); + s = jQuery.extend(true, {}, jQuery.ajaxSettings, s); var jsonp, status, data, callbackContext = s.context || window, @@ -271,13 +275,12 @@ jQuery.extend({ } // Matches an absolute URL, and saves the domain - var parts = rurl.exec( s.url ); + var parts = rurl.exec( s.url ), + remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host); // If we're requesting a remote document // and trying to load JSON or Script with a GET - if ( s.dataType === "script" && type === "GET" && parts - && ( parts[1] && parts[1] !== location.protocol || parts[2] !== location.host )) { - + if ( s.dataType === "script" && type === "GET" && remote ) { var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); script.src = s.url; @@ -334,19 +337,22 @@ jQuery.extend({ xhr.setRequestHeader("Content-Type", s.contentType); } - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[s.url] ) { - xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]); - } + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[s.url] ) { + xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]); + } - if ( jQuery.etag[s.url] ) { - xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]); - } + if ( jQuery.etag[s.url] ) { + xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]); } + } // Set header so the called script knows that it's an XMLHttpRequest - xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + // Only send the header if it's not a remote XHR + if ( !remote ) { + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } // Set the Accepts header for the server, depending on the dataType xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? @@ -457,6 +463,8 @@ jQuery.extend({ xhr.send( type === "POST" || type === "PUT" ? s.data : null ); } catch(e) { jQuery.handleError(s, xhr, null, e); + // Fire the complete handlers + complete(); } // firefox 1.5 doesn't fire statechange for sync requests @@ -467,7 +475,7 @@ jQuery.extend({ function success(){ // If a local callback was specified, fire it and pass it the data if ( s.success ) { - s.success.call( callbackContext, data, status ); + s.success.call( callbackContext, data, status, xhr ); } // Fire the global callback @@ -596,19 +604,19 @@ jQuery.extend({ // If an array was passed in, assume that it is an array // of form elements - if ( jQuery.isArray(a) || a.jquery ) + if ( jQuery.isArray(a) || a.jquery ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); }); - else + } else { // Encode parameters from object, recursively. If // jQuery.param.traditional is set, encode the "old" way // (the way 1.3.2 or older did it) jQuery.each( a, function buildParams( prefix, obj ) { - if ( jQuery.isArray(obj) ) + if ( jQuery.isArray(obj) ) { jQuery.each( obj, function(i,v){ // Due to rails' limited request param syntax, numeric array // indices are not supported. To avoid serialization ambiguity @@ -618,20 +626,20 @@ jQuery.extend({ add( prefix + ( param_traditional ? "" : "[]" ), v ); }); - else if ( typeof obj == "object" ) - if ( param_traditional ) + } else if ( typeof obj == "object" ) { + if ( param_traditional ) { add( prefix, obj ); - else + } else { jQuery.each( obj, function(k,v){ buildParams( prefix ? prefix + "[" + k + "]" : k, v ); }); - - else + } + } else { add( prefix, obj ); - + } }); - + } // Return the resulting serialization return s.join("&").replace(r20, "+"); }