フォームデータの送信
FormData fetch POST Object.fromEntries
フォームの入力値を収集してサーバーに送信する方法をまとめます。FormDataとJSON送信の使い分けが重要です。
デモ:フォームデータの収集
コード例
js
const form = document.querySelector('form');
form.addEventListener('submit', async (e) => {
e.preventDefault();
// ===== FormData 方式(ファイルアップロードに対応)=====
const formData = new FormData(form);
// 個別取得
formData.get('name'); // "山田太郎"
formData.getAll('tags'); // 複数選択された値の配列
// オブジェクトに変換
const obj = Object.fromEntries(formData.entries());
// { name: "山田太郎", email: "..." }
// fetch で送信
await fetch('/api/submit', {
method: 'POST',
body: formData, // Content-Type は自動設定
// headers は設定しない(boundary が自動追加される)
});
// ===== JSON 方式(REST APIに多い)=====
const data = Object.fromEntries(new FormData(form).entries());
await fetch('/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
});
// FormData の手動操作
formData.append('userId', '42'); // 追加
formData.set('name', '新しい名前'); // 上書き
formData.delete('tmp'); // 削除
formData.has('email'); // true/falseファイルアップロードの例
js
// ファイルアップロード(FormData を使う)
const fileInput = document.querySelector('input[type="file"]');
const formData = new FormData();
// 単一ファイル
formData.append('file', fileInput.files[0]);
// 複数ファイル
for (const file of fileInput.files) {
formData.append('files', file);
}
// メタデータと一緒に送信
formData.append('description', '添付ファイルの説明');
// 進捗付き送信(XHR)
const xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', (e) => {
const percent = (e.loaded / e.total * 100).toFixed(0);
progressBar.style.width = percent + '%';
});
xhr.open('POST', '/api/upload');
xhr.send(formData);🤖 AIプロンプトテンプレート
以下の要件を満たすTypeScript + Reactコンポーネントを作成してください。 - FormDataを使ったフォームデータの収集と送信のサンプルを示す - テキスト・ファイル・チェックボックスなど複数種類の入力を含むフォームの例を含める - FormDataにデータを追加・削除・取得するAPIの使い方を示す - multipart/form-dataでファイルをアップロードするサンプルを含める - FormDataをJSONに変換してAPIに送信するサンプルを含める - コメントは日本語で記述する
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。