2015-12-16 85 views
0

我正在使用具有多個選擇(使用Select2)的表單並使用HTML5的Formdata對象將數據提交給服務器。當我發送文本或文件時運行良好,但在這種情況下不起作用。發送多個選擇到服務器

我已經根據需要給出了名稱屬性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是空的。如果我指定name =「thread_p」而不是使用[],那麼我會單獨獲取最後一個選定的值。

PS:忽略數組中的其他值。這些是我從客戶端發送的其他參數。

如果你想知道在select中沒有選項,那麼它們通過select2的AJAX加載,它正常工作。

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

您嘗試使用$('。theread_p_ip')。val()獲取select2倍數的值。你會得到價值。我在示例 –

+0

中試過。這將提供價值,但如果您需要在服務器上獲取它,則需要使用[]符號。但是,如果您將變量中的所有onchange變量值保存在變量中,則可以將該變量發送到服務器,而不必擔心[]符號。不管怎麼說,多謝拉。 –