2015-12-16 4 views
0

Я использую форму с несколькими выборами (с помощью Select2) и отправку данных на сервер с использованием объекта Formdata HTML5. Он работает хорошо, когда я отправляю текст или файлы, но не работает в этом случае.Отправка множественного выбора на сервер

Я присвоил атрибуту name как lbl [] по мере необходимости, а также указал multiple = "multiple".

Поддерживает ли Formdata несколько вариантов или есть что-то, что у меня отсутствует?

Мой выбор:

<select class="form-control theread_p_ip" name="thread_p[]" multiple="multiple" style="width: 100%"></select> 

Путь я использую FormData:

form_data = new FormData($(mydata.sform)[0]); 
ajaxoptions.data=form_data; 

где ajaxoptions является объектом я передаю в JQuery AJAX и $ (mydata.sform) [0] Выбор моя форма

Я проверил с помощью print_r($_POST,true) и я получаю это:

Array 
(
[thread_p] => 
[thread_lbl] => giggg 
[ddemand] => json 
[dtype] => json 
[eltarget] => -1 
[sform] => #ta-tbxnewthread 
[mkey] => tbx_newthread 
) 

Вы можете видеть, что thread_p пуст. Если я укажу имя = "thread_p" вместо использования [], я получаю только последнее выбранное значение.

PS: Игнорировать другие значения в массиве. Это другие параметры, которые я отправляю с клиентской стороны.

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

UPDATE: решаемые с помощью скрипки hackerman в: https://jsfiddle.net/95khdzp2/1/

И в стороне сервера вы получите значение, разделенное «», которые вы должны отделить с помощью explode(',', $variable); если вы используете PHP

+0

'ajaxoptions.data.mySelect2 = $ (". Theread_p_ip "). Val();' ?? – Hackerman

+0

Нет. select2 - это просто плагин, который я использую. http://select2.github.io/ нет переменной data.mySelect2 –

+0

Вы даже пытались ... или, может быть, вы уже решили это? – Hackerman

ответ

1

Вы могли бы следовать этой логике:

var ajaxOptions = {}; 
ajaxOptions.data = {}; 
$(function(){ 
    $(".theread_p_ip").select2(); 

    $(".theread_p_ip").change(function(){ 
    ajaxOptions.data.mySelect2 = $(this).val(); 
    console.log(ajaxOptions); 
    }); 
}); 

На этом пути, ваш ajaxOptionsObject может обновить свои ценности, основанные на select2 изменений.

1

Согласно выбор2 документация, Вам не нужно давать массив имен, только дать имя, здесь имя = «thread_p»

согласно документации, есть пример при условии,

$(".js-example-basic-multiple").select2(); 

<select class="js-example-basic-multiple" multiple="multiple"> 
    <option value="AL">Alabama</option> 
    ... 
    <option value="WY">Wyoming</option> 
</select> 

см https://select2.github.io/examples.html

+0

Если я не даю [] нотацию, посылается только одно значение (указанное в вопросе). Я протестировал его. –

+0

вы пытаетесь получить значение select2 multiple с $ ('. Theread_p_ip'). Val(). вы получите значение. Я попробовал это в примере –

+0

Да. Это даст значение, но если вам нужно получить его на сервере, вам нужно использовать [] нотацию. Но если вы сохраните все значения onchange на стороне клиента в переменной, вы можете отправить эту переменную на сервер, не беспокоясь о [] нотации. В любом случае спасибо. –

Смежные вопросы