опубликовать данные чекбокса с помощью jquery - PullRequest
1 голос
/ 02 августа 2011

У меня есть html-фрагмент, подобный этому

<input type="checkbox" name="color" value="red"/>red
<input type="checkbox" name="color" value="green"/>green
<input type="checkbox" name="color" value="purple"/>purple
<input type="checkbox" name="color" value="grey"/>grey

, и я хочу использовать jquery для отправки значения на сервер, поэтому я использовал jquery, как это

$.post('/test', {'color': ['red', 'green']});

Я действительно искал этовопрос в stackoverflow, но люди говорят, что это должно быть «color []» вместо «color», но всякий раз, когда я использовал «color» или «color []», firebug отображал данные поста «color% 5B% 5D = red & color% 5B»% 5D = зеленый ', и мой сервер не может работать правильно, но при использовании

<input type="submit" value="submit"/>

для публикации firebug говорится, что данные' color = red & color = green ', и мой сервер работает правильно.Как это могло произойти?моя версия jquery 1.4.4

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Я полагаю, что когда вы вызываете -

$.post('/test', {'color': ['red', 'green']});

, массив передается в качестве данных поста, а сглаживание массива является причиной 'color% 5B% 5D = red & color% 5B% 5D= зеленый 'результат.

Если вы используете следующее -

$('input:checkbox[name="color"][checked=true]').serialize()

Это должно вернуть все отмеченные флажки в формате' color = red & color = green '.Здесь есть jsfiddle, который пытается проиллюстрировать эту концепцию - http://jsfiddle.net/789nP/.

1 голос
/ 02 августа 2011

По какой-то причине разработчики jQuery решили, что в PHP причудливой обработкой нескольких элементов управления с одинаковым именем является правильный путь. Как следствие, при отправке массива данных jQuery будет добавлять [] к имени (%5B%5D - это просто кодированное в URL представление []).

для публикации Firebug говорит, что данные 'color = red & color = green', и мой сервер работает правильно

Это говорит о том, что вы используете что-то другое, чем PHP, для обработки данных, поэтому волшебная обработка PHP [] в именах не применяется.

Вы можете найти color[] на сервере ...

, например * * 1016

@values = $query->param('color[]');

… или вы можете установить традиционный режим, чтобы остановить jQuery, PHP, уточняющий ваши данные.

$.post('/test', {'color': ['red', 'green']}, { traditional: true });

Тогда нормальный доступ должен работать:

@values = $query->param('color');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...