Skip to content
Permalink
Browse files

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).
  • Loading branch information
jaubourg committed Jan 19, 2011
1 parent 3ea3664 commit 1cecfa1ece0d48b253fb0775bba645c464e363a4
Showing with 52 additions and 51 deletions.
  1. +50 −48 src/ajax.js
  2. +2 −3 src/ajax/xhr.js
@@ -229,7 +229,53 @@ jQuery.extend({

// 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
@@ -670,7 +716,7 @@ jQuery.extend({
}

// Get transport
transport = jQuery.ajaxTransport( s );
transport = jQuery.ajaxTransport( s , options );

// If no transport, we auto-abort
if ( ! transport ) {
@@ -803,7 +849,7 @@ jQuery.extend({
});

//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,
@@ -841,7 +887,7 @@ function ajax_selectOrExecute( structure , s ) {

} 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)
@@ -876,7 +922,7 @@ function ajax_addElement( structure , args ) {
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 ];
@@ -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 );
@@ -53,7 +53,7 @@ testXHR = undefined;

// Create transport if the browser can provide an xhr
if ( jQuery.support.ajax ) {
jQuery.ajaxTransport( function( s , determineDataType ) {
jQuery.ajaxTransport( function( s ) {

// Cross domain only allowed if supported through XMLHttpRequest
if ( ! s.crossDomain || jQuery.support.cors ) {
@@ -186,8 +186,7 @@ if ( jQuery.support.ajax ) {

// Guess response & update dataType accordingly
response =
determineDataType(
s,
s.determineDataType(
xhr.getResponseHeader("content-type"),
xhr.responseText,
xhr.responseXML );

0 comments on commit 1cecfa1

Please sign in to comment.
You can’t perform that action at this time.