jquery сериализация и множественный выбор выпадающего - PullRequest
18 голосов
/ 25 февраля 2011

Я использую функцию jquery serialize () для сериализации значений формы и отправки ее через ajax

, например, например, если имя и идентификатор формы factoryUsers

var data=$("#factoryUsers").serialize();

Теперь это отлично работает для форм с текстовыми полями, текстовыми областями, простыми раскрывающимися списками и т. Д. Но когда у меня несколько раскрывающихся списков, все идет наперекосяк, например, если у меня есть раскрывающийся списоктипа

<select size="5" id="factoryUsers" name="factoryUsers" multiple="multiple">

сериализация больше не работает правильно.поэтому, если я выбираю 3 пользователей, я получаю строку запроса, такую ​​как

factoryUsers=5&factoryUsers=23&factoryUsers=11

, изменение выбора типа массива не помогает либо factoryUsers[]

Любая идея илипомочь, как заставить это работать правильно, было бы здорово.

Ответы [ 6 ]

14 голосов
/ 25 февраля 2011

Попробуйте изменить имя выбора на factoryUsers[]. Таким образом, вы можете перебрать его в бэкэнде.

11 голосов
/ 25 февраля 2011

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

Если вы используете PHP, это может помочь: http://bytes.com/topic/php/answers/12267-how-php-_post-gets-multiple-values-html-form

Можете ли вы сказать нам, какой язык вы используете?

7 голосов
/ 13 августа 2013

Все, что вам нужно, это изменить name = "factoryUsers" на name = "factoryUsers []", PHP будет обрабатывать его как массив.

2 голосов
/ 27 июня 2015

Просто попробуйте получить значение с помощью val ()

data='factoryUsers=' + $("#factoryUsers").val();

Это даст вам значения через запятую.

factoryUsers = 1,2,4

Если этот предмет относится к вашей форме.Затем попробуйте добавить значение элемента end сериализации.Пример:

data= f.serialize() + '&factoryUsers=' + $('#factoryUsers').val();

Поскольку элемент, записанный дважды в запросе, последнее значение будет действительным в контроллере.

1 голос
/ 12 апреля 2017

Ваше имя элемента должно иметь тип массива factoryUsers[] Измените свой код так:

<select size="5" id="factoryUsers" name="factoryUsers[]" multiple="multiple">

Спасибо ...

1 голос
/ 07 ноября 2015

Вы можете использовать функцию PHP

parse_str($_POST)

Эта функция представляется функцией извлечения. После этого вы можете получить доступ к переменной с именем $factoryUsers, а этот массив является массивом $factoryUsers[n].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...