}
if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.split( rspacesAjax ),
+ var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
i = 0,
length = dataTypes.length,
dataType,
// any existing element
placeBefore = /^\+/.test( dataType );
if ( placeBefore ) {
- dataType = dataType.substr( 1 );
+ dataType = dataType.substr( 1 ) || "*";
}
list = structure[ dataType ] = structure[ dataType ] || [];
// then we add to the structure accordingly
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(),
// 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 {