3.11formdata的使用

本文介绍了一种使用JavaScript的FormData对象上传文件的方法,并展示了如何解析服务器返回的JSON数据,将其显示在网页上。具体步骤包括创建FormData实例,添加文件,设置AJAX请求参数,发送请求以及成功回调中解析数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var formData = new FormData();
formData.append('files[]',document.getElementById("file").files[0]);
JgAjax({
url:'sub_act.php?act=upload_file',//地址
type: 'POST',//方式
contenType: "",
flag: '2',//上传文件时把flag设置为2,一般请求则不需要
dataType: "json",
data: formData,//数据
success:function(data){
console.log(data);
// 再下部li中进行添加
var oli='';
for(var i=0;i<data.res.length;i++){
oli+="<li><p><a class='hr' href='"+data.res[i].attachment+"'>"+data.res[i].rel_attachment+"</a></p><a href='javascript:;' onclick='delelteUpFile(\"'+data.res[i].attachment+'\")'>删除</a></li>"
}
document.getElementById('upfile_list').innerHTML=oli;
}
});

转载于:https://www.cnblogs.com/mrxinxin/p/10513697.html

<think>我们正在讨论如何使用FormData对象进行表单数据收集和提交。根据引用[1]和[2],我们可以知道FormData是JavaScript中用于处理表单数据的API,它可以直接从表单元素创建,也可以手动添加数据,并且支持文件上传。同时,引用[3]提到了在Spring MVC中处理嵌套表单数据,但用户的问题主要集中在前端部分。 用户的问题:如何在前端使用FormData对象进行表单数据收集和提交? 回答步骤: 1. 创建FormData对象:可以从表单元素创建,也可以手动创建并添加数据。 2. 添加数据:可以通过append方法添加额外的数据。 3. 提交数据:使用fetch或XMLHttpRequest发送FormData对象。 注意:引用[1]提供了FormData的基本用法,引用[2]展示了表单的HTML结构,我们可以结合两者。 另外,用户要求使用中文回答,并且按照系统级指令处理数学表达式(但本问题不涉及数学表达式,所以可以忽略),同时需要生成相关问题。 回答结构: - 先介绍FormData的基本概念和用途。 - 分步骤说明如何收集表单数据(包括从表单创建和手动添加)。 - 分步骤说明如何提交数据(使用fetch示例)。 - 简要比较FormDataJSON格式(根据引用[1]中的比较表,但用户主要问操作,所以简单提及即可)。 - 最后生成相关问题。 由于引用[3]是关于后端处理嵌套表单的,与用户问题关系不大,可以忽略。 下面开始组织回答:</think>### 如何使用 FormData 对象进行表单数据收集和提交 #### 一、FormData 基础操作 1. **从表单创建 FormData 对象** 通过 `querySelector` 获取表单元素,直接生成 FormData 对象: ```javascript const form = document.querySelector(&#39;#myForm&#39;); // 获取表单元素 const formData = new FormData(form); // 自动收集所有带 name 属性的表单控件 ``` 2. **手动添加数据** 使用 `append()` 方法添加额外字段(支持文本/文件): ```javascript formData.append(&#39;timestamp&#39;, Date.now()); // 文本数据 formData.append(&#39;avatar&#39;, fileInput.files[0]); // 文件数据 ``` 3. **操作表单数据** - 获取值:`formData.get(&#39;username&#39;)` - 删除字段:`formData.delete(&#39;temp_field&#39;)` - 检查存在:`formData.has(&#39;email&#39;)` #### 二、提交表单数据 使用 `fetch` 发送数据(支持文件上传): ```javascript fetch(&#39;/api/submit&#39;, { method: &#39;POST&#39;, body: formData // 自动设置 Content-Type 为 multipart/form-data }) .then(response => response.json()) .catch(error => console.error(&#39;提交失败&#39;, error)); ``` #### 三、特殊场景处理 1. **动态表单字段** 循环添加多个字段: ```javascript const tags = [&#39;js&#39;, &#39;web&#39;, &#39;api&#39;]; tags.forEach(tag => formData.append(&#39;tags[]&#39;, tag)); // 后端接收数组 ``` 2. **文件上传** ```html <input type="file" id="doc" name="document" multiple> <!-- 多文件选择 --> ``` ```javascript const files = document.getElementById(&#39;doc&#39;).files; Array.from(files).forEach(file => formData.append(&#39;docs&#39;, file)); ``` 3. **嵌套数据结构** 需后端配合解析(如 Spring MVC 的 `@ModelAttribute`): ```javascript formData.append(&#39;user.profile.bio&#39;, &#39;前端开发者&#39;); // 点语法表示嵌套 ``` #### 四、与 JSON 提交对比 | 特性 | FormData | JSON | |---------------|------------------------------|---------------------| | 文件支持 | ✅ 原生 | ❌ 需 Base64 编码 | | 内容类型 | `multipart/form-data` | `application/json` | | 数据结构 | 扁平键值对 | 复杂嵌套结构 | | 编码效率 | 更高(二进制直接传输) | 较低(文本编码) | > 优先选择 FormData 的场景:包含文件上传、需要兼容旧表单、简化数据编码流程[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值