我有一个使用jQuery和Ajax发布表单数据的表单,但是不能让它发送具有相同名称和方括号的输入值。
输入看起来像这样,会有不同的值:
<input type="text" name="service[]" value="Value 1">
以下是获取值的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发送它们。
提前致谢:)
答案 0 :(得分:2)
对您的问题不是一个确切的答案,但有一种更简单的方法可以做到这一点。
将输入字段换入表单并进行on-submit
- 事件。返回此事件为false,因此实际上并未提交。
这就是诀窍。在将事件返回false之前,请执行ajax-request。给表单一个id并使用seralize-method创建一个json-string。
[...]
data: $('#formIDGoesHere').serialize(),
[...]
如果您将此文件作为POST变量发布到PHP文件中,那么您的所有值都不会像$_POST
中那样可用。
答案 1 :(得分:1)
你为什么这样做?
var data = 'name=' + name.val() + '&email=' + email.val() + '&phone='
+ phone.val() + '&service=' + service.val() + '&brief='
+ encodeURIComponent(brief.val());
您不得使用未转义的值构建字符串。对于HTML来说也是如此,对于URL编码的表单数据和SQL和JSON,以及以字符串形式传输结构化数据的几乎所有其他方式都是如此。
显然你正在使用encodeURIComponent()
,但为什么只使用一次?
有.serialize()
来处理所有细节。使用它而不是构建自己的URL字符串。
alert($('form').serialize());
答案 2 :(得分:0)
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
答案 3 :(得分:0)
如果您有多个名为service []的输入,则可以检索输入,如下面的
var service = $("input[name=service\\[\\]]");
但是如果现在有多个输入,那么服务变量就是一个数组,你现在必须遍历服务数组中的每个项目并检索像
这样的值for(var i=0;i<service.length;i++){
data += service[i].val()+",";
}
答案 4 :(得分:0)
您可能需要阅读 this 并尝试此操作:
$('#theFormID').serialize().replace('%5B%5D', '[]')
或者
$.param(obj, true);
$.post(url,serializedObj,function(){});
true
中的$.param
表示应该使用序列化对象的传统方法。传统方法在遇到相同的参数名称时不使用方括号。