javascript - 为什么 FormData() 构造函数不起作用

标签 javascript fetch form-data

我有这个登录代码。 当我调试代码时,我检查 FormData() 构造函数没有返回任何内容,它是空的。我究竟做错了什么? formLog 常量确实收集表单数据,但将其传递给 FormData() 构造函数后,返回的对象为空

<form id="login" method="post" enctype="multipart/form-data" name="login">
    <input type="email" name="email" placeholder="Tu email">
    <br><br>
    <input type="password" name="password" placeholder="Tu contraseña">
    <br><br>
    <input type="submit" value="Login">
</form>

<script type="text/javascript">
    const formLog = document.querySelector('#login')
    //Creamos un objeto con los datos del formulario

    // AL formLog le agregamos un evento 
    formLog.addEventListener('submit',event =>{
        event.preventDefault()
        const data = new FormData(formLog)       
        fetch('/api/signin',{
            method:'POST',
            body: data,
        })
        .then(res => {
            res.json()
        })
        .then(resData => {
            localStorage.setItem('token', resData.token)
        })
    })
</script>

最佳答案

使用spread syntax将从您的 FormData 对象中获取所有值。然后使用Array#reducedestructuring将所有内容组织在一个简单的对象中。

const form = document.getElementById("login");

form.addEventListener("submit", function(e){
  e.preventDefault();
  
  const data = [...new FormData(this)]
  .reduce((a,[key,value])=>{
    a[key] = value;
    return a;
  }, {});
  
  console.log(data);
});
<form id="login" method="post" enctype="multipart/form-data" name="login">
    <input type="email" name="email" placeholder="Tu email" value="test@test.com">
    <br><br>
    <input type="password" name="password" placeholder="Tu contraseña" value="some password">
    <br><br>
    <input type="submit" value="Login">
</form>

关于javascript - 为什么 FormData() 构造函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299450/

相关文章:

javascript - 错误 : ENOENT, 没有这样的文件或目录 '/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript/app/models

reactjs - 如何为每个测试重置 fetch-mock?

javascript - 使用 FormData 上传 AJAX 图片不在服务器端显示图片

javascript - Office 365、Sharepoint、Html <h1> 内容列表

javascript - 这个javascript声明是数组还是某种对象

javascript - CSS 选择器路径 - TestComplete Javascript 无法单击按钮

mysql - 如何按名称获取数据库?

javascript - 在 JavaScript 中获取 API 以将表单数据保存到 JSON 或文本文件

jquery - 使用 AJAX 和 formData 上传多个文件(单独上传,而不是多个文件一起上传)

c# - 如何从 Postman 获取表单数据到 WebApi