我正在尝试使用ajax在一个提交中提交2个symfony表单
var data = $('#facebookPostTargetForm').serialize();
data = data.concat("\r\n", $('#facebookPostForm').serialize());
$.ajax({
url: '{{ path('facebookpostwizard_new') }}',
type: "POST",
data: data,
dataType: 'html',
success: function(data){
//console.log(data);
alert('OK');
}
});
几乎一切都正常工作,除了在我的控制器中使用$form->handleRequest($request)
的情况我得到一些麻烦得到第一个形式的最后一个字段(大多数_token所以$form->isValid()
总是返回false)和第二个字段的第一个字段!我没有把控制器的片段放在这里,因为如果我只提交一个表单,一切都很完美,它似乎与data.concat()有关,但我尝试了很多东西而且它不起作用。提前致谢!
在不知道您的PHP代码的情况下,我只能猜出问题是什么。但我怀疑你没有正确处理你收到的数组。或者更确切地说,您正在尝试构建与您实际发送的内容完全不同的内容。
concat()不会连接字符串而是连接数组。如果您只想连接表单的序列化查询字符串,您可以像这样简单地使用+
运算符:
var data = $('#facebookPostTargetForm').serialize() + '&' + $('#facebookPostForm').serialize();
这将从两个表单中生成一个大的查询字符串,您将在$request
对象中将它们作为POST变量使用。请注意,这仅在两个表单中的字段命名方式不同时才有效。如果字段具有相同的名称,则form2将覆盖form1。
如果您使用相同的字段名称并希望单独处理表单,则应发布对象而不是表单:
var data = {
'form1': $('#facebookPostTargetForm').serializeArray(),
'form2': $('#facebookPostForm').serializeArray()
};
这将提交一个对象对象(或PHP语音中的多维关联数组)。然后,您可以在PHP中访问它们,如下所示:
$form1 = $request->get('form1');
$field1 = $form1['field1']