// Parse text as xml
"text xml": jQuery.parseXML
+ },
+
+ // Utility function that handles dataType when response is received
+ // (for those transports that can give text or xml responses)
+ determineDataType: function( ct , text , xml ) {
+
+ var s = this,
+ contents = s.contents,
+ type,
+ regexp,
+ dataTypes = s.dataTypes,
+ transportDataType = dataTypes[0],
+ response;
+
+ // Auto (xml, json, script or text determined given headers)
+ if ( transportDataType === "*" ) {
+
+ for ( type in contents ) {
+ if ( ( regexp = contents[ type ] ) && regexp.test( ct ) ) {
+ transportDataType = dataTypes[0] = type;
+ break;
+ }
+ }
+ }
+
+ // xml and parsed as such
+ if ( transportDataType === "xml" &&
+ xml &&
+ xml.documentElement /* #4958 */ ) {
+
+ response = xml;
+
+ // Text response was provided
+ } else {
+
+ response = text;
+
+ // If it's not really text, defer to converters
+ if ( transportDataType !== "text" ) {
+ dataTypes.unshift( "text" );
+ }
+
+ }
+
+ return response;
}
+
},
// Main method
timeoutTimer,
// Cross-domain detection vars
loc = document.location,
+ protocol = loc.protocol || "http:",
parts,
// The jXHR state
state = 0,
// 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 ) {
current,
// Previous dataType
prev,
+ // Conversion expression
+ conversion,
// Conversion function
conv,
// Conversion functions (when text is used in-between)
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;
}
// Status-dependent callbacks
- jXHR.statusCode( statusCode );
+ jXHR.statusCode( oldStatusCode );
if ( s.global ) {
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ) ,
// 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;
parts = rurl.exec( s.url.toLowerCase() );
s.crossDomain = !!(
parts &&
- ( parts[ 1 ] && parts[ 1 ] != loc.protocol ||
+ ( parts[ 1 ] && parts[ 1 ] != protocol ||
parts[ 2 ] != loc.hostname ||
- ( parts[ 3 ] || 80 ) != ( loc.port || 80 ) )
+ ( parts[ 3 ] || ( ( parts[ 1 ] || protocol ) === "http:" ? 80 : 443 ) ) !=
+ ( loc.port || ( protocol === "http:" ? 80 : 443 ) ) )
);
}
}
// Get transport
- transport = jQuery.ajaxTransport( s );
+ transport = jQuery.ajaxTransport( s , options );
// If no transport, we auto-abort
if ( ! transport ) {
});
//Execute or select from functions in a given structure of options
-function ajax_selectOrExecute( structure , s ) {
+function ajax_selectOrExecute( structure , s , options ) {
var dataTypes = s.dataTypes,
transportDataType,
} else {
- selected = list[ i ]( s , determineDataType );
+ selected = list[ i ]( s , options );
// If we got redirected to another dataType
// Search there (if not in progress or already tried)
first = jQuery.type( args[ 0 ] );
if ( first === "object" ) {
- return ajax_selectOrExecute( structure , args[ 0 ] );
+ return ajax_selectOrExecute( structure , args[ 0 ] , args[ 1 ] );
}
structure = jQuery.ajaxSettings[ structure ];
};
} );
-// Utility function that handles dataType when response is received
-// (for those transports that can give text or xml responses)
-function determineDataType( s , ct , text , xml ) {
-
- var contents = s.contents,
- type,
- regexp,
- dataTypes = s.dataTypes,
- transportDataType = dataTypes[0],
- response;
-
- // Auto (xml, json, script or text determined given headers)
- if ( transportDataType === "*" ) {
-
- for ( type in contents ) {
- if ( ( regexp = contents[ type ] ) && regexp.test( ct ) ) {
- transportDataType = dataTypes[0] = type;
- break;
- }
- }
- }
-
- // xml and parsed as such
- if ( transportDataType === "xml" &&
- xml &&
- xml.documentElement /* #4958 */ ) {
-
- response = xml;
-
- // Text response was provided
- } else {
-
- response = text;
-
- // If it's not really text, defer to converters
- if ( transportDataType !== "text" ) {
- dataTypes.unshift( "text" );
- }
-
- }
-
- return response;
-}
-
})( jQuery );