jQuery输入具有相同的名称和方括号

我有一个使用jQuery和Ajax发布表单数据的表单,但不能让它发送具有相同名称和方括号的输入值。

输入看起来像这样,并且具有不同的值:

 

以下是获取值的var:

 var service = $("input[name=service\\[\\]]") 

然后用于收集要通过Ajax发送的数据的var如下所示:

 var data = 'name=' + name.val() + '&email=' + email.val() + '&phone=' + phone.val() + '&service=' + service.val() + '&brief=' + encodeURIComponent(brief.val()); 

然后在PHP脚本中发送邮件包括以下内容……

 $service = $_POST['service']; $body .= implode(' | ', $service); 

所以我的问题是,如何获取名称为name=service[]的输入值,并通过Ajax发送它们。

提前致谢 :)

不是您问题的确切答案,但有一种更简单的方法可以做到这一点。

将输入字段包装在表单中并进行on-submit -event。 返回此事件为false,因此实际上并未提交。

这是诀窍。 在将事件返回false之前,请执行ajax-request。 给表单一个id并使用seralize-method创建一个json-string。

 [...] data: $('#formIDGoesHere').serialize(), [...] 

如果您将此文件作为POST变量发布到PHP文件中,则所有值都不可用,就像它们通常在$_POST

你为什么做这个?

 var data = 'name=' + name.val() + '&email=' + email.val() + '&phone=' + phone.val() + '&service=' + service.val() + '&brief=' + encodeURIComponent(brief.val()); 

您不应该使用未转义的值构建字符串。 这适用于HTML,对于URL编码的表单数据和SQL和JSON以及几乎所有以字符串forms传输结构化数据的方式都是如此。

显然你正在使用encodeURIComponent() ,但为什么只使用一次?

.serialize()来处理所有细节。 使用它而不是构建自己的URL字符串。

 alert($('form').serialize()); 

你的意思是:

 var values = $("input[name='service\\[\\]']") .map(function(){return $(this).val();}).get(); var joined = values.join("|"); //so it shows val1|val2| val3 .. and pass to server 

如果您有多个名为service []的输入,则可以检索下面的输入

 var service = $("input[name=service\\[\\]]"); 

但是如果你有多个输入现在服务变量是一个数组,你现在必须循环通过服务数组中的每个项目并检索像

 for(var i=0;i 

你可能想读这个并尝试这个:

 $('#theFormID').serialize().replace('%5B%5D', '[]') 

或这个

 $.param(obj, true); $.post(url,serializedObj,function(){}); 

$.paramtrue表示应该使用序列化对象的传统方法。 传统方法遇到相同的参数名称时不使用方括号。