【问题标题】:Submitting 2 symfony forms with Ajax使用 Ajax 提交 2 个 symfony 表单
【发布时间】:2017-12-18 21:54:21
【问题描述】:

我正在尝试使用 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)和第二个表单的第一个字段时遇到了一些问题,几乎所有东西都正常工作! !!!我没有把我的控制器的 sn-p 放在这里,因为如果我只提交一个表单,一切都很完美,它似乎与 data.concat() 有关,但我已经尝试了很多东西,但它没有工作。提前致谢!

【问题讨论】:

  • “一些麻烦”和“不起作用”究竟是什么意思?错误消息和/或意外行为的描述比这些模糊的陈述更合适。但是...为什么要在序列化的表单数据前面添加换行符???那是做什么用的?我怀疑服务器是否会理解您要提交的内容。

标签: php jquery ajax forms symfony


【解决方案1】:

在不知道您的 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']

【讨论】:

  • 好点@masterfloda 我删除了我的帖子,因为我注意到它是多余的
  • 您好,它非常有用,只是说我在基于 w3schools.com/js/js_string_methods.asp 的字符串中使用了 concat,我只是错过了在 concat 中使用 '&' 的事实,它就像一个魅力! !我想我不能将此标记为答案,这太可惜了!!!还是谢谢!!!!
  • @masterfloda 是否有类似于“var data = $('#facebookPostTargetForm').serialize() + '&' + $('#facebookPostForm').serialize();”的方法但是以一种相关的形式上传文件????提前致谢!!!
  • @RubislandyRodriguez 不使用普通的 jQuery。为此,Juan 删除的答案会有所帮助:-) 解决方案是 ajaxForm 插件。看到这个答案:stackoverflow.com/a/4545089/7933618
  • @masterfloda 我发现了这个: var target = $('#facebookPostTargetForm').serializeArray(); var data = new FormData($('#facebookPostForm')[0]); for (var i=0; i
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2018-10-30
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多