Makes sure all converters keys are lowercased before any conversion is taking place...
[jquery.git] / src / ajax.js
index 363e9c8..39abe90 100644 (file)
@@ -334,13 +334,17 @@ jQuery.extend({
 
                var // Create the final options object
                        s = jQuery.extend( true, {}, jQuery.ajaxSettings, options ),
-                       // Callbacks contexts
+                       // Callbacks context
                        // We force the original context if it exists
                        // or take it from jQuery.ajaxSettings otherwise
                        // (plain objects used as context get extended)
                        callbackContext =
                                ( s.context = ( "context" in options ? options : jQuery.ajaxSettings ).context ) || s,
-                       globalEventContext = callbackContext === s ? jQuery.event : jQuery( callbackContext ),
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node
+                       globalEventContext = callbackContext !== s && callbackContext.nodeType ?
+                               jQuery( callbackContext ) : jQuery.event,
                        // Deferreds
                        deferred = jQuery.Deferred(),
                        completeDeferred = jQuery._Deferred(),
@@ -736,9 +740,9 @@ function buildParams( prefix, obj, traditional, add ) {
 
                // Serialize object item.
                } else {
-                       jQuery.each( obj, function( k, v ) {
-                               buildParams( prefix + "[" + k + "]", v, traditional, add );
-                       });
+                       for ( var name in obj ) {
+                               buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+                       }
                }
 
        } else {
@@ -838,8 +842,9 @@ function ajaxConvert( s, response ) {
        }
 
        var dataTypes = s.dataTypes,
-               converters = s.converters,
+               converters = {},
                i,
+               key,
                length = dataTypes.length,
                tmp,
                // Current and previous dataTypes
@@ -856,6 +861,16 @@ function ajaxConvert( s, response ) {
        // For each dataType in the chain
        for( i = 1; i < length; i++ ) {
 
+               // Create converters map
+               // with lowercased keys
+               if ( i === 1 ) {
+                       for( key in s.converters ) {
+                               if( typeof key === "string" ) {
+                                       converters[ key.toLowerCase() ] = s.converters[ key ];
+                               }
+                       }
+               }
+
                // Get the dataTypes
                prev = current;
                current = dataTypes[ i ];