具有相同名称和方括号的jQuery输入
我有一个表单,它使用jQuery和Ajax发布表单数据,但无法让它发送具有相同名称和方括号的输入值 输入如下所示,具有不同的值:具有相同名称和方括号的jQuery输入,jquery,ajax,Jquery,Ajax,我有一个表单,它使用jQuery和Ajax发布表单数据,但无法让它发送具有相同名称和方括号的输入值 输入如下所示,具有不同的值: <input type="text" name="service[]" value="Value 1"> 然后,用于收集通过Ajax发送的数据的var如下所示: var data = 'name=' + name.val() + '&email=' + email.val() + '&phone=' + phone.val() + '&a
<input type="text" name="service[]" value="Value 1">
然后,用于收集通过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发送它们
提前感谢:)对您的问题没有确切的答案,但有一种更简单的方法 将输入字段包装在表单中,并在提交事件中生成一个
。将此事件返回false,这样它就不会实际提交
这是诀窍。在返回事件false之前,执行ajax请求。为表单提供一个id,并使用seralize方法生成json字符串
[...]
data: $('#formIDGoesHere').serialize(),
[...]
如果您将其作为post变量发布到PHP文件中,那么您的所有值都不会像在$\u post
中那样可用,您为什么要这样做
var data = 'name=' + name.val() + '&email=' + email.val() + '&phone='
+ phone.val() + '&service=' + service.val() + '&brief='
+ encodeURIComponent(brief.val());
您不应该从未设置范围的值生成字符串。这对于HTML是正确的,对于URL编码的表单数据、SQL和JSON以及几乎所有其他以字符串形式传输结构化数据的方式也是正确的
显然您正在使用encodeURIComponent()
,但为什么只使用一次
有一种方法可以处理所有的细节。使用它,而不是构建自己的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<service.length;i++){
data += service[i].val()+",";
}
for(var i=0;i您可能需要阅读并尝试以下操作:
$('#theFormID').serialize().replace('%5B%5D', '[]')
还是这个
$.param(obj, true);
$.post(url,serializedObj,function(){});
$中的true
。param
表示应该使用序列化对象的传统方法。当遇到相同的参数名时,传统方法不使用方括号。哇,那很简单!我对jQuery/Ajax非常陌生,我是从在线脚本获得代码的,我不知道。serialize()
感谢您的帮助如果您还是一名初学者,那么现在正是将这一终极真理内化的好时机:无论何时构建具有结构的东西(如上面提到的HTML或SQL)通过串接字符串,即时胃痛应该会提醒您可能做错了什么。所有跨站点脚本和注入漏洞以及许多错误都是由于不小心构建字符串造成的。搜索您正在使用的框架以找到避免构建字符串的方法。这些问题中的大多数都已解决,请不要担心我们自己的解决方案。嗨,斯图尔特,如果其中一个问题解决了你的问题,请点击接受它们。
$.param(obj, true);
$.post(url,serializedObj,function(){});