В чем разница между .serialize() и .serializeArray()?

Я экспериментирую с отправкой формы на контроллер. В документации jQuery сказано, что .serializeArray() должен отправлять массив json, а .serialize() должен создавать строку запроса.

Однако, когда я пробую это и проверяю в режиме IE9 F12, в обоих случаях это выглядит как строка запроса. Какой бы звонок я ни сделал ...

Что мне не хватает?


person kaze    schedule 03.05.2012    source источник
comment
посмотрите на [ЭТО] [1] [1]: stackoverflow.com/questions/4235052/   -  person Sebastian Breit    schedule 03.05.2012
comment
Я действительно видел это, прежде чем опубликовать этот вопрос. я до сих пор не понимаю!   -  person kaze    schedule 03.05.2012
comment
Можете ли вы дать результат, который вы видите в консоли отладки?   -  person Julien    schedule 03.05.2012


Ответы (1)


serializeArray создает массив (не "массив json" - такого не существует); вы можете проверить это самостоятельно с помощью console.log($("#myform").serializeArray()). С другой стороны, serialize создает строку запроса, которая должна быть частью HTTP-запроса. Оба представления эквивалентны в том смысле, что с помощью соответствующего кода вы можете преобразовать одно в другое без какой-либо двусмысленности.

Причина доступности обеих версий заключается в том, что serialize более удобна, когда вы просто хотите сделать HTTP-запрос (просто поместите результат в строку запроса), а serializeArray более удобна, если вы хотите обработать результаты самостоятельно.

AJAX-методы jQuery не заботятся о том, даете ли вы им тот или иной параметр, потому что они определяют тип параметра и преобразуют его в строку запроса, если она уже не является таковой, поэтому к моменту выполнения запроса внешние наблюдатели не могут сказать, что было исходный формат параметров.

person Jon    schedule 03.05.2012
comment
Ok! Но какой смысл в использовании как serialize(), так и serializeArray()? - person kaze; 03.05.2012
comment
@kaze: Это все равно, что спросить, в чем смысл иметь и спортивные автомобили, и универсалы. Если единственное, для чего вы собираетесь их использовать, — это поездка в торговый центр в 500 м вниз по дороге, нет никакой разницы, но для большинства других целей вам нужно использовать правильный инструмент для работы. - person Jon; 03.05.2012
comment
Я вижу сейчас. Я пробовал в console.log и вижу разницу. Я был озадачен тем, что не увидел никакой разницы в своем ajax-вызове. - person kaze; 03.05.2012
comment
Почему это принятый ответ, если он не отвечает на вопрос? Вопрос в том, в чем разница между .serialize() и .serializeArray()? Этот ответ является просто объяснением того, что делает serializeArray. - person Mark Simpson; 09.11.2013
comment
@MarkSimpson: один создает массив, другой создает строку (запрос) - это ясно, IMO. Я не думаю, что будет справедливо сказать, что ответ не касается вопроса / является объяснением serializeArray, потому что 1) текст вопроса дает понять, что ОП хочет знать, почему оба делают одно и то же < /i> и 2) второй абзац объясняет именно это. - person Jon; 09.11.2013
comment
@Jon Один создает массив, другой создает строку (запрос) - это ясно, ИМО. Это совершенно ясно, спасибо :) Этого нет в вашем ответе. - person Mark Simpson; 09.11.2013
comment
Итак, если я передаю изображения, я хочу использовать serializeArray(), а не serialize()? - person a coder; 17.05.2015
comment
Serialize() создает строку json (обычный текст), SerializeArray() создает массив объектов, а не текстовый массив, у вас будет массив объектов, каждый из которых имеет ключи «имя» и «значение», соответствующие полю формы. - person lisandro; 19.10.2019
comment
Конечно, есть массив JSON. № 7, страница 3: ecma-international.org/wp-content /загрузки/ - person xr280xr; 30.04.2021