X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=9173d8a89a7610b1429f850a2606877a4a9c17cb;hb=3ea366401f461cd670c5472ddbb3ad7f3260d13c;hp=43bab7c3d702db7f616b9e887b57ab8c98ead498;hpb=92c3d87a9cdd611af06e46a5e66a4876c2be5ed0;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 43bab7c..9173d8a 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -233,8 +233,7 @@ jQuery.extend({ }, // Main method - // (s is used internally) - ajax: function( url , options , s ) { + ajax: function( url , options ) { // Handle varargs if ( arguments.length === 1 ) { @@ -248,19 +247,14 @@ jQuery.extend({ // Get the url if provided separately options.url = url || options.url; - // Create the final options object - s = jQuery.extend( true , {} , jQuery.ajaxSettings , options ); - - // We force the original context - // (plain objects used as context get extended) - s.context = options.context; - - var // jQuery lists + var // Create the final options object + s = jQuery.extend( true , {} , jQuery.ajaxSettings , options ), + // jQuery lists jQuery_lastModified = jQuery.lastModified, jQuery_etag = jQuery.etag, // Callbacks contexts - callbackContext = s.context || s, - globalEventContext = s.context ? jQuery( s.context ) : jQuery.event, + callbackContext = options.context || s.context || s, + globalEventContext = callbackContext === s ? jQuery.event : jQuery( callbackContext ), // Deferreds deferred = jQuery.Deferred(), completeDeferred = jQuery._Deferred(), @@ -301,30 +295,25 @@ jQuery.extend({ }, // Builds headers hashtable if needed - // (match is used internally) - getResponseHeader: function( key , match ) { + getResponseHeader: function( key ) { + + var match; if ( state === 2 ) { - if ( responseHeaders === undefined ) { + if ( !responseHeaders ) { responseHeaders = {}; - if ( typeof responseHeadersString === "string" ) { - - while( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; } } match = responseHeaders[ key.toLowerCase() ]; - } else { - - match = null; } - return match; + return match || null; }, // Cancel the request @@ -337,6 +326,10 @@ jQuery.extend({ } }; + // We force the original context + // (plain objects used as context get extended) + s.context = options.context; + // Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) @@ -352,7 +345,7 @@ jQuery.extend({ // Dereference transport for early garbage collection // (no matter how long the jXHR transport will be used - transport = 0; + transport = undefined; // Set readyState jXHR.readyState = status ? 4 : 0; @@ -375,7 +368,12 @@ jQuery.extend({ // Stored success success, // Stored error - error; + error, + + // Keep track of statusCode callbacks + oldStatusCode = statusCode; + + statusCode = undefined; // If successful, handle type chaining if ( status >= 200 && status < 300 || status === 304 ) { @@ -417,6 +415,8 @@ jQuery.extend({ current, // Previous dataType prev, + // Conversion expression + conversion, // Conversion function conv, // Conversion functions (when text is used in-between) @@ -455,8 +455,8 @@ jQuery.extend({ if ( prev !== "*" && current !== "*" && prev !== current ) { // Get the converter - conv = converters[ prev + " " + current ] || - converters[ "* " + current ]; + conversion = prev + " " + current; + conv = converters[ conversion ] || converters[ "* " + current ]; conv1 = conv2 = 0; @@ -531,7 +531,7 @@ jQuery.extend({ } // Status-dependent callbacks - jXHR.statusCode( statusCode ); + jXHR.statusCode( oldStatusCode ); if ( s.global ) { globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ) , @@ -559,20 +559,14 @@ jQuery.extend({ // Status-dependent callbacks jXHR.statusCode = function( map ) { if ( map ) { - var resolved = jXHR.isResolved(), - tmp; - if ( resolved || jXHR.isRejected() ) { - tmp = map[ jXHR.status ]; - if ( tmp ) { - if ( map === statusCode ) { - delete statusCode[ jXHR.status ]; - } - jXHR[ resolved ? "done" : "fail" ]( tmp ); - } - } else { + var tmp; + if ( statusCode ) { for( tmp in map ) { statusCode[ tmp ] = [ statusCode[ tmp ] , map[ tmp ] ]; } + } else { + tmp = map[ jXHR.status ]; + jXHR.done( tmp ).fail( tmp ); } } return this;