Commit 1cecfa1e authored by jaubourg's avatar jaubourg

Moves determineDataType into ajaxSettings so that it is accessible to...

Moves determineDataType into ajaxSettings so that it is accessible to transports without the need for a second argument and so that we can now pass the original options to the transport instead. Also ensures the original options are actually propagated to prefilters (they were not).
parent 3ea36640
...@@ -229,7 +229,53 @@ jQuery.extend({ ...@@ -229,7 +229,53 @@ jQuery.extend({
// Parse text as xml // Parse text as xml
"text xml": jQuery.parseXML "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 // Main method
...@@ -670,7 +716,7 @@ jQuery.extend({ ...@@ -670,7 +716,7 @@ jQuery.extend({
} }
// Get transport // Get transport
transport = jQuery.ajaxTransport( s ); transport = jQuery.ajaxTransport( s , options );
// If no transport, we auto-abort // If no transport, we auto-abort
if ( ! transport ) { if ( ! transport ) {
...@@ -803,7 +849,7 @@ jQuery.extend({ ...@@ -803,7 +849,7 @@ jQuery.extend({
}); });
//Execute or select from functions in a given structure of options //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, var dataTypes = s.dataTypes,
transportDataType, transportDataType,
...@@ -841,7 +887,7 @@ function ajax_selectOrExecute( structure , s ) { ...@@ -841,7 +887,7 @@ function ajax_selectOrExecute( structure , s ) {
} else { } else {
selected = list[ i ]( s , determineDataType ); selected = list[ i ]( s , options );
// If we got redirected to another dataType // If we got redirected to another dataType
// Search there (if not in progress or already tried) // Search there (if not in progress or already tried)
...@@ -876,7 +922,7 @@ function ajax_addElement( structure , args ) { ...@@ -876,7 +922,7 @@ function ajax_addElement( structure , args ) {
first = jQuery.type( args[ 0 ] ); first = jQuery.type( args[ 0 ] );
if ( first === "object" ) { if ( first === "object" ) {
return ajax_selectOrExecute( structure , args[ 0 ] ); return ajax_selectOrExecute( structure , args[ 0 ] , args[ 1 ] );
} }
structure = jQuery.ajaxSettings[ structure ]; structure = jQuery.ajaxSettings[ structure ];
...@@ -924,48 +970,4 @@ jQuery.each( [ "Prefilter" , "Transport" ] , function( _ , name ) { ...@@ -924,48 +970,4 @@ jQuery.each( [ "Prefilter" , "Transport" ] , function( _ , name ) {
}; };
} ); } );
// 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 ); })( jQuery );
...@@ -53,7 +53,7 @@ testXHR = undefined; ...@@ -53,7 +53,7 @@ testXHR = undefined;
// Create transport if the browser can provide an xhr // Create transport if the browser can provide an xhr
if ( jQuery.support.ajax ) { if ( jQuery.support.ajax ) {
jQuery.ajaxTransport( function( s , determineDataType ) { jQuery.ajaxTransport( function( s ) {
// Cross domain only allowed if supported through XMLHttpRequest // Cross domain only allowed if supported through XMLHttpRequest
if ( ! s.crossDomain || jQuery.support.cors ) { if ( ! s.crossDomain || jQuery.support.cors ) {
...@@ -186,8 +186,7 @@ if ( jQuery.support.ajax ) { ...@@ -186,8 +186,7 @@ if ( jQuery.support.ajax ) {
// Guess response & update dataType accordingly // Guess response & update dataType accordingly
response = response =
determineDataType( s.determineDataType(
s,
xhr.getResponseHeader("content-type"), xhr.getResponseHeader("content-type"),
xhr.responseText, xhr.responseText,
xhr.responseXML ); xhr.responseXML );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment