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

时间:2012-11-27 10:01:44

标签: jquery ajax

我有一个使用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发送它们。

提前致谢:)

5 个答案:

答案 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表示应该使用序列化对象的传统方法。传统方法在遇到相同的参数名称时不使用方括号。