.serializeArray() (since jQuery 1.2) encodes successful form controls as an array of { name, value } objects — ready to inspect, filter, or pass to $.param(). It takes no arguments and returns an Array.
Remember
$("form").serializeArray()
// → [ { name: "a", value: "1" }, { name: "b", value: "2" } ]
// Prefer the <form> itself (not form + children)
// Same successful-control rules as .serialize()
// $.param(arr) === $("form").serialize()
Note. Duplicate names overwrite — keep the array for multi-selects.
Send. Use JSON.stringify(payload) with a JSON content type.
Edge Cases & Pitfalls
Check these when a field is “missing” from your array.
name
No name → never included
Every successful control must have a name attribute or it is skipped.
checked
Unchecked radios/checkboxes omitted
Same as a normal browser form submit — only checked ones appear.
files
File inputs are not serialized
Use FormData with processData: false and contentType: false.
selector
Form + children causes duplicates
Do not serialize $("form, form :input"). Select the form alone.
multi
Duplicate names stay as separate entries
Multi-selects produce multiple objects with the same name. Mapping to a plain object overwrites earlier values.
Compatibility
Browser Support
.serializeArray() has been part of jQuery since 1.2. It works in every browser that runs your loaded jQuery version — no separate browser feature flag.
✓ Stable · jQuery 1.2+
jQuery .serializeArray()
Supported across jQuery 1.x, 2.x, and 3.x. Prefer a current jQuery 3.x build. Output is a plain JavaScript array of objects.
100%With jQuery
Google ChromeAll versions · Desktop & Mobile
Full support
Mozilla FirefoxAll versions · Desktop & Mobile
Full support
Apple SafariAll versions · macOS & iOS
Full support
Microsoft EdgeAll versions · Chromium & Legacy
Full support
Internet ExplorerIE 6+ · Legacy environments
Full support
OperaAll modern versions
Full support
.serializeArray()Universal
Bottom line: Safe for everyday form Ajax. Give fields names, select the form only, transform the array when needed, and use FormData for files.
Analysis
Performance Notes
Approach
Cost
Best for
.serializeArray() on submit
Cheap
Typical contact / filter forms
Live serialize on every keystroke
Fine for small forms
Debounce on huge forms
Map array → object + JSON
Cheap
JSON APIs (watch duplicate names)
Building the array is cheap compared with the network request. Prefer serialize-on-submit for production; live preview is mainly for learning/debug.
Remember
Key Takeaways
Role: form → array of { name, value } for inspect/transform.
Call:$("form").serializeArray() — no arguments, returns an Array.
Rules: name + successful controls only; no files / disabled / unchecked.
Related:.serialize() for strings; $.param(arr) after transforms.
One line:.serializeArray() turns a form’s successful controls into a name/value array — select the form, transform if needed, then $.param() or JSON.
Frequently Asked Questions
jQuery .serializeArray() encodes successful form controls as an array of plain objects — each with name and value properties. Call $("form").serializeArray() to get [{ name: "email", value: "[email protected]" }, …]. It takes no arguments and returns an Array, not a string.
.serializeArray() returns an array of { name, value } objects. .serialize() returns the same data as one URL query string. They use the same successful-control rules. Note: $(form).serialize() equals $.param($(form).serializeArray()).
Same rules as native HTML form submit: each control needs a name and must not be disabled. Checkboxes and radios appear only when checked. File inputs and submit button values are excluded. Missing value attributes become an empty string.
Yes — that is what .serialize() does internally. $.param($("form").serializeArray()) produces the same string as $("form").serialize(). You can modify the array first, then call $.param().
Yes — JSON.stringify($("form").serializeArray()) is valid JSON. Many APIs expect a flat object instead; map the array with a loop or reduce. For uploads use FormData, not serializeArray.
Prefer $("form").serializeArray(). Selecting both the form and its children in one set can duplicate entries. You may select individual controls when they are not inside a form.