使用Ajax提交2个symfony表单

问题描述 投票:-3回答:1

我正在尝试使用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 jquery ajax forms symfony
1个回答
2
投票

在不知道您的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']
© www.soinside.com 2019 - 2024. All rights reserved.