forked from jquery/jquery
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Extracts the serialization code from the ajax module so that alternat…
…ive ajax implementations can use it without the need for the whole ajax module to be included in the build.
- Loading branch information
Showing
6 changed files
with
301 additions
and
292 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
var r20 = /%20/g, | ||
rbracket = /\[\]$/, | ||
rCRLF = /\r?\n/g, | ||
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, | ||
rselectTextarea = /^(?:select|textarea)/i; | ||
|
||
jQuery.fn.extend({ | ||
serialize: function() { | ||
return jQuery.param( this.serializeArray() ); | ||
}, | ||
serializeArray: function() { | ||
return this.map(function(){ | ||
return this.elements ? jQuery.makeArray( this.elements ) : this; | ||
}) | ||
.filter(function(){ | ||
return this.name && !this.disabled && | ||
( this.checked || rselectTextarea.test( this.nodeName ) || | ||
rinput.test( this.type ) ); | ||
}) | ||
.map(function( i, elem ){ | ||
var val = jQuery( this ).val(); | ||
|
||
return val == null ? | ||
null : | ||
jQuery.isArray( val ) ? | ||
jQuery.map( val, function( val, i ){ | ||
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; | ||
}) : | ||
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; | ||
}).get(); | ||
} | ||
}); | ||
|
||
//Serialize an array of form elements or a set of | ||
//key/values into a query string | ||
jQuery.param = function( a, traditional ) { | ||
var prefix, | ||
s = [], | ||
add = function( key, value ) { | ||
// If value is a function, invoke it and return its value | ||
value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); | ||
s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); | ||
}; | ||
|
||
// Set traditional to true for jQuery <= 1.3.2 behavior. | ||
if ( traditional === undefined ) { | ||
traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; | ||
} | ||
|
||
// If an array was passed in, assume that it is an array of form elements. | ||
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { | ||
// Serialize the form elements | ||
jQuery.each( a, function() { | ||
add( this.name, this.value ); | ||
}); | ||
|
||
} else { | ||
// If traditional, encode the "old" way (the way 1.3.2 or older | ||
// did it), otherwise encode params recursively. | ||
for ( prefix in a ) { | ||
buildParams( prefix, a[ prefix ], traditional, add ); | ||
} | ||
} | ||
|
||
// Return the resulting serialization | ||
return s.join( "&" ).replace( r20, "+" ); | ||
}; | ||
|
||
function buildParams( prefix, obj, traditional, add ) { | ||
var name; | ||
|
||
if ( jQuery.isArray( obj ) ) { | ||
// Serialize array item. | ||
jQuery.each( obj, function( i, v ) { | ||
if ( traditional || rbracket.test( prefix ) ) { | ||
// Treat each array item as a scalar. | ||
add( prefix, v ); | ||
|
||
} else { | ||
// If array item is non-scalar (array or object), encode its | ||
// numeric index to resolve deserialization ambiguity issues. | ||
// Note that rack (as of 1.0.0) can't currently deserialize | ||
// nested arrays properly, and attempting to do so may cause | ||
// a server error. Possible fixes are to modify rack's | ||
// deserialization algorithm or to provide an option or flag | ||
// to force array serialization to be shallow. | ||
buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); | ||
} | ||
}); | ||
|
||
} else if ( !traditional && jQuery.type( obj ) === "object" ) { | ||
// Serialize object item. | ||
for ( name in obj ) { | ||
buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); | ||
} | ||
|
||
} else { | ||
// Serialize scalar item. | ||
add( prefix, obj ); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.