// 3) selection will start with transport dataType and THEN go to "*" if needed
transports: {},
- // Checkers
- // 1) key is dataType
- // 2) they are called to control successful response
- // 3) error throws is used as error data
- dataCheckers: {
-
- // Check if data is a string
- "text": function(data) {
- if ( typeof data != "string" ) {
- jQuery.error("typeerror");
- }
- },
-
- // Check if xml has been properly parsed
- "xml": function(data) {
- var documentElement = data ? data.documentElement : data;
- if ( ! documentElement || ! documentElement.nodeName ) {
- jQuery.error("typeerror");
- }
- if ( documentElement.nodeName == "parsererror" ) {
- jQuery.error("parsererror");
- }
- }
- },
-
// List of data converters
// 1) key format is "source_type destination_type" (a single space in-between)
// 2) the catchall symbol "*" can be used for source_type
// Convert anything to text
"* text": window.String,
- // Text to html (no transformation)
- "text html": window.String,
+ // Text to html (true = no transformation)
+ "text html": true,
// Evaluate text as a json expression
"text json": jQuery.parseJSON,
oneConv,
convertion,
dataTypes = s.dataTypes,
- dataCheckers = s.dataCheckers,
dataConverters = s.dataConverters,
dataFilter = s.dataFilter,
responses = {
current = dataTypes[ i ];
+ if ( responses[ current ] ) {
+ xhr[ "response" + responses[ current ] ] = response;
+ responses[ current ] = 0;
+ }
+
if ( i ) {
- prev = dataTypes[ i - 1 ];
-
- if ( prev === "*" ) {
-
- prev = current;
-
- } else if ( current !== "*" && prev !== current ) {
+ if ( prev !== "*" && current !== "*" && prev !== current ) {
oneConv = conv1 =
dataConverters[ ( conversion = prev + " " + current ) ] ||
dataConverters[ "* " + current ];
- if ( ! oneConv && prev !== "text" && current !== "text" ) {
- conv1 = dataConverters[ prev + " text" ] || dataConverters[ "* text" ];
- conv2 = dataConverters[ "text " + current ];
- }
- if ( oneConv || conv1 && conv2 ) {
- response = oneConv ? conv1( response ) : conv2( conv1( response ) );
- } else {
- throw "no " + conversion;
+ if ( oneConv !== true ) {
+
+ if ( ! oneConv && prev !== "text" && current !== "text" ) {
+ conv1 = dataConverters[ prev + " text" ] || dataConverters[ "* text" ];
+ conv2 = dataConverters[ "text " + current ];
+ }
+
+ if ( oneConv || conv1 && conv2 ) {
+ response = oneConv ? conv1( response ) : conv2( conv1( response ) );
+ } else {
+ throw "no " + conversion;
+ }
}
}
- }
-
- checker = dataCheckers[ current ];
-
- if ( response != null && checker ) {
- checker( response );
- }
-
- if ( responses[ current ] ) {
- xhr[ "response" + responses[ current ] ] = response;
- responses[ current ] = 0;
- }
-
- if ( ! i && dataFilter ) {
-
- response = dataFilter( response );
+ } else if ( dataFilter ) {
+ response = s.dataFilter( response );
dataTypes = s.dataTypes;
- dataFilter = 0;
- i--;
}
+
+ prev = current;
}
// We have a real success