我正在使用具有多个选择的表单(使用Select2)并使用HTML5的Formdata对象将数据提交到服务器。它在我发送文本或文件时效果很好但在这种情况下不起作用。
我已根据需要将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为空。如果我指定name =“thread_p”而不是使用[],我会单独获取最后一个选定的值。
PS:忽略数组中的其他值。这些是我从客户端发送的其他参数。
如果你想知道select中没有选项,那么它们是通过select2加载的,这是正常工作的。
更新:使用黑客小提琴解决:https://jsfiddle.net/95khdzp2/1/
在服务器端,您将获得以','分隔的值,如果您使用PHP,则必须使用explode(',', $variable);
分隔
答案 0 :(得分:1)
根据select2文档,您不需要提供名称数组,只需提供名称,此处名称=&#34; thread_p&#34;
根据文档,提供了一个示例,
$(".js-example-basic-multiple").select2();
<select class="js-example-basic-multiple" multiple="multiple">
<option value="AL">Alabama</option>
...
<option value="WY">Wyoming</option>
</select>
答案 1 :(得分:1)
你可以遵循这个逻辑:
var ajaxOptions = {};
ajaxOptions.data = {};
$(function(){
$(".theread_p_ip").select2();
$(".theread_p_ip").change(function(){
ajaxOptions.data.mySelect2 = $(this).val();
console.log(ajaxOptions);
});
});
通过这种方式,您的ajaxOptions
Object
可以根据select2
更改更新其值。