From 1cecfa1ece0d48b253fb0775bba645c464e363a4 Mon Sep 17 00:00:00 2001 From: jaubourg Date: Wed, 19 Jan 2011 18:16:29 +0100 Subject: [PATCH] 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). --- src/ajax.js | 98 +++++++++++++++++++++++++------------------------ src/ajax/xhr.js | 5 +-- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 9173d8a8..e5fb5c4b 100644 --- a/src/ajax.js +++ b/src/ajax.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 ); diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js index 0f30469d..4acb7005 100644 --- a/src/ajax/xhr.js +++ b/src/ajax/xhr.js @@ -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 );