【问题标题】:Submit form with Ajax in array format, not serialized?用Ajax以数组格式提交表单,不序列化?
【发布时间】:2021-05-16 17:16:31
【问题描述】:

我想使用 Ajax 提交一个表单,但我希望它在一个数组中,而不是序列化。

var form = $(this);
data: {data:form.serialize()};

在我的 PHP 中给了我这个:

firstname=John&lastname=Doe&phone=123123412345

我必须在 PHP 中运行此代码才能将其转换为我想要的格式:

parse_str($_POST['data'], $data);

似乎超级不必要,我想删除该步骤。我怎样才能以数组格式传递表单?谢谢

【问题讨论】:

标签: javascript php arrays ajax


【解决方案1】:
// var form = $(this);
var form = this;
data: {data: Object.fromEntries(new FormData(form))}

然后你会得到$_POST这样的变量:

Array
(
    [data] => Array
        (
            [firstname] => John
            [lastname] => Doe
            [phone] => 123123412345
        )

)

【讨论】:

  • 我收到此错误:TypeError:FormData 构造函数的参数 1 ('form') 必须是 HTMLFormElement 的实例
  • 我看到您的上下文中的this 应该是HTMLFormElement,所以请尝试使用new FormData(this),而不是new FormData(form)
  • 我这样修复它: var form = $(this); Object.fromEntries(new FormData((form)[0]))
  • 或者只是var form = this;Object.fromEntries(new FormData(form))。我已经更新了答案。
【解决方案2】:

你过度设计了你的 Javascript。

在这一行:

data: {data:form.serialize()};

您正在创建一个以data 作为键并以序列化数据作为其值的对象。当您将它传递给 jQuery 以进行 AJAX 调用时,它会以该形式传递它。因此,您在 $_POST['data'] 中找到了您的序列化字符串,您必须将其解压缩。

你应该将你的序列化数据发送到 jQuery 而不将其打包到一个对象中:

data: form.serialize()};

jQuery 将识别并发送带有正确键的 daya,以便您可以直接在 $_POST['firstname']$_POST['lastname'] 等中读取它。

【讨论】:

  • 我也在传递其他数据。
  • 我回答了你提出的问题。如果还有更多内容,那么您应该将其包含在您的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多