发送多个选择到服务器

时间:2015-12-16 12:14:44

标签: javascript php jquery ajax

我正在使用具有多个选择的表单(使用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);分隔

2 个答案:

答案 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>

请参阅https://select2.github.io/examples.html

答案 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更改更新其值。