FormData 对象

FormData 是一种用于处理表单数据的 JavaScript 对象,通常与 XMLHttpRequest 或 fetch() API 一起使用,以发送表单数据(尤其是包含文件上传的复杂表单)到服务器。以下是一个简单的 FormData 教程。

1. 创建 FormData 对象

你可以通过以下方式创建一个 FormData 对象:

// 空的 FormData 对象
const formData = new FormData();

// 从 HTML 表单中获取数据
const formElement = document.querySelector('form');
const formDataFromForm = new FormData(formElement); 

 

2. 添加数据到 FormData

你可以使用 append() 方法向 FormData 中添加键值对。支持的数据类型包括字符串、数字、Blob 和 File。

formData.append('username', 'JohnDoe'); // 字符串
formData.append('age', 30); // 数字
formData.append('file', fileInput.files[0]); // 文件

注意: - 如果键已经存在,append() 会追加另一个值。 - 如果需要覆盖已有值,可以先调用 delete()。

3. 获取 FormData 数据

你可以通过迭代器或直接访问来获取 FormData 中的内容。

使用 forEach 遍历:

formData.forEach((value, key) => {
    console.log(`${key}: ${value}`);
}); 

使用 entries() 获取键值对:

for (let [key, value] of formData.entries()) {
    console.log(key + ': ' + value);
} 

4. 发送 FormData 到服务器

你可以使用 fetch() 或 XMLHttpRequest 将 FormData 发送到服务器。

使用 fetch():

fetch('https://example.com/upload', { method: 'POST', body: formData })
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error)); 

使用 XMLHttpRequest:

const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/upload', true); 
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  } 
};
xhr.send(formData);

5. 示例:完整的文件上传功能

以下是一个完整的文件上传示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Upload</title>
</head>
<body>
    <form id="uploadForm" enctype="multipart/form-data">
        <input type="text" name="username" placeholder="Username">
        <input type="file" name="file"> <button type="submit">Upload</button>
    </form>

    <script>
    const form = document.getElementById('uploadForm');

    form.addEventListener('submit', async (e) => {
        e.preventDefault(); // 阻止默认提交行为

        const formData = new FormData(form);

        try {
            const response = await fetch('https://example.com/upload', {
                method: 'POST',
                body: formData
            });

            const result = await response.json();
            console.log('Server Response:', result);
        } catch (error) {
            console.error('Error:', error);
        }
    });
    </script>
</body>
</html>

6. 注意事项

  • FormData 会自动设置正确的 Content-Type,不需要手动设置。
  • 如果你需要自定义 Content-Type,请确保不使用 FormData 的自动处理。
  • 文件上传时,服务器端需要正确解析 multipart 格式的数据。
声明:本站所有文章和图片,如无特殊说明,均为原创发布,转载请注明出处。
随机推荐
JavaScript Proxy 代理
WordPress 插件路径相关
JavaScript requestAnimationFrame 定时刷新
选择排序
Nine 主题
WordPress 自定义模板路径
WordPress 分页
Node.js 模块概念