尝试使用JavaScript将HTML表单数据发送到API

杰克·富兰克林

如标题所示,我试图通过HTML表单捕获用户的输入,并在提交时将其数据发布到API。


我可以成功进行POST并从API获得响应,但是没有附加任何表单数据(至少我认为这是持续存在的问题)。


由于这是惯例,因此我使用了在https://reqres.in/网上找到的免费发布API 感谢所有帮助!

的HTML

<form id="myForm">
    <label for="myName">Send me your name:</label>
    <input id="myName" name="name" value="Alex">
    <br>
    <label for="userId">your id:</label>
    <input id="userId" name="id" value="123">
    <br>
    <label for="myJob">your name:</label>
    <input id="myJob" name="job" value="Web Dev">
    <br>
    <input id="postSubmit" type="submit" value="Send Me!">
</form>

这是我的JavaScript

const thisForm = document.getElementById('myForm');
thisForm.addEventListener('submit', async function (e) {
    e.preventDefault();
    let response = await fetch('https://reqres.in/api/users', {
        method: 'POST',
        body: new FormData(thisForm)
    });

    let result = await response.json();
    alert(result.message)
    console.log(result)
});
特克斯

您的表单数据已添加到POST请求中,但是以reqres.in忽略格式添加reqres.in如果它是有效的JSON字符串,则似乎仅处理请求正文。

当您发送的请求的主体设置为时,new FormData()浏览器会将Content-Type: multipart/form-data标头添加到请求中。reqres.in忽略多部分表单数据。reqres.inAPI应该响应一条错误消息,以通知您您使用了API无法正确处理的Content-Type,而不是忽略您提供的主体,创建记录并以进行响应201 created这绝对是他们的失败。

这是使用的有效代码段Content-Type: application/json但是请注意,这不是将FormData对象转换为相应JSON的可靠方法,并且Object.fromEntries仅在非常现代的浏览器中可用:

const thisForm = document.getElementById('myForm');
thisForm.addEventListener('submit', async function (e) {
    e.preventDefault();
    const formData = new FormData(thisForm).entries()
    const response = await fetch('https://reqres.in/api/users', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(Object.fromEntries(formData))
    });

    const result = await response.json();
    console.log(result)
});
<form id="myForm">
    <label for="myName">Send me your name:</label>
    <input id="myName" name="name" value="Alex">
    <br>
    <label for="userId">your id:</label>
    <input id="userId" name="id" value="123">
    <br>
    <label for="myJob">your name:</label>
    <input id="myJob" name="job" value="Web Dev">
    <br>
    <input id="postSubmit" type="submit" value="Send Me!">
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Ajax将表单数据发送到Struts2操作类

将html表单数据发送到mysql数据库

将html表单数据发送到发件人的电子邮件

将表单数据发送到电子邮件

如何使用angular 2将表单数据发送到服务器api?

将表单数据发送到Vanilla JS

使用带有ajax的post请求将html表单数据发送到php到https://foo.com

如何使用Volley将JSONObject作为表单数据发送到服务器

将表单数据从React句柄提交功能发送到python API?

将表单数据数组发送到PHP端点

如何将HTML表单数据发送到wordpress上的wp_mail函数?

我如何使用nativescript中的fetch将表单数据发送到php?

如何将表单数据发送到API-Windev 24

如何使用angular将表单数据发送到服务器?

将表单数据发送到2个地方

如何将HTML表单数据发送到Java http服务器

在提交时将表单数据发送到Javascript

使用“提交”按钮将表单数据发送到电子邮件

将表单数据发送到DataTables Ajax调用

使用 codeigniter 成功提交后将表单数据发送到电子邮件

使用php将表单数据发送到邮件时发生错误

使用 Ajax 将表单数据发送到 Django 视图

如何将html表单数据发送到nodejs

无法将表单数据发送到 PHP 页面

如何使用axios将vue中的表单数据作为json发送到变量?

如何使用 php 将潜在客户表单数据发送到 swaggerhub Api?

是否可以使用 Angular 将表单数据发送到外部链接?

如何将表单数据发送到链接?

使用 React 使用 Axios 将表单数据从前端发送到后端