FormData.append详解

一、formdata.append怎么用

FormData.append() 函数用于将一个新的数据项添加到 FormData 对象。以下是使用示例:

var formdata = new FormData();
formdata.append('username', 'ABC');
formdata.append('email', 'ABC@example.com');

通过上述示例代码,可以在 FormData 对象里添加一个键值对。append() 方法接收两个参数,第一个参数 key 即是表单元素的 name 值,也是该数据项的键名,第二个参数即是该数据项的值。

此外,如果需要上传文件,则需要用到 fileReader 的相关API,以一个上传图片的为例:




function preview() {
    var fileInput = document.getElementById('fileInput');
    var file = fileInput.files[0];
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function (e) {
        var img = document.getElementById('preview');
        img.src = e.target.result;
        var formdata = new FormData();
        formdata.append('image',file); 
        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/upload', true);
        xhr.send(formdata);
    }
}

在该示例中,首先需要构造一个上传文件的 input 元素,再监听该元素的 onchange 事件。当用户选择了文件后,会自动触发事件处理函数 preview()。在该函数中,从 fileInput 元素中读取 file 对象并使用 FileReader API读取图片信息并显示到 img 元素上。接着创建 FormData 对象并将 file 对象添加到其中,通过 XMLHttpRequest 发送至服务器端。在服务器端,通过 req.files.file 属性即可获取到文件对象。

二、formdata.append函数没用

无论是表单元素的值,还是文件对象,都可以通过 append() 方法添加到 FormData 对象中。但是,如果表单元素的值是一个空字符串或者为 null,那么通过该方法添加到 FormData 对象中时会被忽略。

表单中的一些元素是如下:




    北京
    上海
    广州

可以看到,几个元素都有默认值。要注意的是,select 元素的默认值是 selected 属性,而不是 value 属性。如果未指定 selected 属性,那么默认选中的就是第一个 option 标签。对于 checkbox 元素,如果未指定 checked 属性,那么默认是不选中的。

对于 textarea 标签,如果不设置 value 属性,默认是一个空字符串。设置了 value 属性就会将默认值覆盖掉。在提交表单时,无论默认值是什么,都会进行重置。如果想要获取表单元素的默认值,可以通过 js 获取元素的 value 属性。

三、formdata.append无效果

在一些情况下,使用 formdata.append 添加到 FormData 对象中的数据项并没有达到预期效果,这可能会给开发带来困扰。

首先要考虑是否将 FormData 对象通过 XMLHttpRequest 发送到服务器端,如果没有发送,则 setData() 方法会返回 undefined,请求头中也不会有该参数。

其次,需要确保添加的数据项的键名和键值是有效的。如果键名或键值无效,该数据项也不会被添加到 FormData 对象中。需要注意的是,键名不能包含特殊字符,比如空格、+、&、=等;键值可以是任何类型,包括字符串、数字、布尔型、对象、文件对象等。

还有一种情况是,在使用 XMLHttpRequest() 发送 FormData 对象时,服务器端程序的处理方式可能也会影响添加数据项的效果。比如,对于 PHP、Node.js、.NET 等服务器端程序,需要根据参数的名称和类型进行相应的解析,才能正确获取数据。如果在发送请求的过程中没有对参数进行有效的编码,那么极有可能导致参数格式错误、接收不到参数等问题。

四、formdata.append第三个参数选取

1、用于设定文件名参数(filename)

let file = document.getElementById('fileInput').files[0];
let form = new FormData();
form.append('file', file, 'test.jpg');

这样就设定了文件名参数为 test.jpg, 上传至服务器端时,以该文件名存储至文件系统。

2、用于设定 content-type 参数

var xhr = new XMLHttpRequest(),
formData = new FormData(),
fileToSend = document.getElementById('file').files[0];
formData.append("file", fileToSend, "example.png");
xhr.open("POST", "example.php");
xhr.setRequestHeader("Content-Type","multipart/form-data");
xhr.send(formData);

该参数用于设定提交内容的类型,一般用于后端解析数据串。

3、其他参数

实际上,对于 formdata.append,只要第一个参数 name 和第二个参数 value 合法即可,其他参数都是可选的。如果有第三个参数,则表明当前 name 值是一个文件对象并且设定了文件名或者 content-type。

如果没有设定第三个参数,则表明 current value 将视为一个普通的字符串。此时,对应的 value 值将会被视为 text/plain 类型。所以不需要缩小数据类型,一律按照String打入即可。

原创文章,作者:ZFGN,如若转载,请注明出处:https://www.506064.com/n/143548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZFGNZFGN
上一篇 2024-10-22 23:34
下一篇 2024-10-22 23:34

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论