3

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

提前致谢 :)

4

5 回答 5

2

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

将您的输入字段包装在一个表单中并创建一个on-submit事件。将此事件返回 false,因此它实际上并未提交。

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

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

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

于 2012-11-27T10:06:30.470 回答
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());
于 2012-11-27T10:10:53.783 回答
1

您可能想阅读内容并尝试以下操作:

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

或这个

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

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

于 2013-08-01T09:32:35.687 回答
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
于 2012-11-27T10:11:47.353 回答
0

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

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

但是,如果您现在有多个输入,则服务变量现在是一个数组,您必须遍历服务数组中的每个项目并检索诸如

for(var i=0;i<service.length;i++){
  data += service[i].val()+",";
}
于 2012-11-27T10:12:49.990 回答