2012-05-03 1 views
23

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

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

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

+3

взгляд на [это] [1] [1]: http://stackoverflow.com/questions/4235052/jquery-question-about-serializearray-and-serialize –

+0

я действительно видел, что перед отправляя этот вопрос. Я все еще не понимаю! – kaze

+0

Можете ли вы дать результат, который вы видите на консоли отладки? – Julien

ответ

33

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

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

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

+2

Хорошо! Но - в чем смысл иметь сериализацию() и serializeArray()? – kaze

+9

@ kaze: Это все равно, что спросить, в чем смысл иметь как спортивные автомобили, так и железнодорожные вагоны. Если единственное, что вы собираетесь использовать для них, - это ехать в торговый центр на 500 метров по дороге, нет никакой разницы, но для большинства других вещей вам нужно использовать правильный инструмент для работы. – Jon

+1

Теперь я вижу. Я пробовал в console.log, и я вижу разницу. Я был озадачен тем, что не мог видеть никакой разницы в моем ajax-вызове. – kaze