使用Ajax

时间:2017-12-18 21:54:22

标签: php jquery ajax forms symfony

我正在尝试使用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()有关,但我尝试了很多东西而且它不起作用。提前谢谢!

1 个答案:

答案 0 :(得分:2)

在不知道您的PHP代码的情况下,我只能猜出问题是什么。但我怀疑你没有正确处理你收到的数组。或者更确切地说,您正在尝试构建与您实际发送的内容完全不同的内容。

concat()不会连接字符串而是连接数组。如果您只想连接表单的序列化查询字符串,可以像这样简单地使用+运算符:

var data = $('#facebookPostTargetForm').serialize() + '&' + $('#facebookPostForm').serialize();

这将从两个表单中生成一个大的查询字符串,您将在$request对象中将它们作为POST变量使用。请注意,这仅在两个表单中的字段命名方式不同时才有效。如果字段具有相同的名称,则form2将覆盖form1。

如果您使用相同的字段名称并希望单独处理表单,则应发布对象而不是表单:

var data = {
    'form1': $('#facebookPostTargetForm').serializeArray(),
    'form2': $('#facebookPostForm').serializeArray()
};

这将提交一个对象ob对象(或PHP语音中的多维关联数组)。然后,您可以使用PHP访问它们:

$form1 = $request->get('form1');
$field1 = $form1['field1']