現役システムエンジニアの備忘録

技術スキルや用語などの記録を残していきます

Ajax / fetch / API(非同期処理)

【JavaScript入門】fetchでPOSTする方法|JSON送信・ヘッダー設定・レスポンス処理を初心者向けに解説

投稿日:

この記事で分かること

  • fetch API で POST リクエストを送る方法
  • JSON を送信するためのヘッダー設定
  • レスポンスの受け取り方(json
  • エラー処理(HTTPエラー・ネットワークエラー)
  • 実務でよく使う POST パターン

fetch API を使った POST リクエストは、API 連携で最もよく使われる基本テクニックのひとつです。
この記事では、JSON の送信方法から FormDataURLSearchParams の使い分け、さらに HTTPエラーやネットワークエラーの扱いまで、実務で役立つ POST の書き方を分かりやすく解説します。



fetchPOST リクエストを送る基本構文

fetch API は、第二引数にオプションを渡すことで
POST / PUT / DELETE などのメソッド を指定できます。


fetch("https://example.com/api", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ message: "Hello" })
});

POST では headersbody をセットで指定するのが基本です。



JSON を送信する場合の書き方

API 連携では JSON を送るケースが最も多いです。


fetch("https://jsonplaceholder.typicode.com/posts", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    title: "Hello",
    body: "fetch POST example",
    userId: 1
  })
})
  .then(res => res.json())
  .then(data => console.log(data));

ポイント

  • Content-Type: application/json を指定する
  • bodyJSON.stringify で文字列化する
  • レスポンスは res.json() で取得する

async / await を使うとさらに読みやすい


async function createPost() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts", {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      title: "Hello",
      body: "async/await example",
      userId: 1
    })
  });

  const data = await res.json();
  console.log(data);
}

createPost();

async / await を使うと、
同期処理のように読みやすいコード になります。

HTTPエラーの扱いに注意(重要)

fetch404 や 500 でも例外にならない ため、
自分でステータスをチェックする必要があります。


const res = await fetch(url, options);

if (!res.ok) {
  throw new Error("HTTPエラー: " + res.status);
}

ネットワークエラーのみ catch に入る点が
XHR と大きく異なります。

フォームデータを送信する場合(multipart/form-data

ファイルアップロードなどでは FormData を使います。


const formData = new FormData();
formData.append("file", fileInput.files[0]);

fetch("/upload", {
  method: "POST",
  body: formData
});

FormData を使う場合は Content-Type を自動設定 させるため、
headers を指定しないのがポイントです。

URLエンコード形式で送信する場合(application/x-www-form-urlencoded


fetch("/login", {
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  body: new URLSearchParams({
    username: "shin",
    password: "1234"
  })
});

ログインフォームなどでよく使われる形式です。

実務でよく使う POST パターンまとめ

  • JSON送信 → application/json + JSON.stringify
  • ファイル送信 → FormDataheaders なし)
  • フォーム送信 → x-www-form-urlencoded

用途に応じて適切な形式を選ぶことが重要です。



fetchPOST に関するよくある質問(FAQ)

Q1

fetch で JSON を送るときに必要な設定は何ですか?

A

Content-Type: application/jsonJSON.stringify が必要です。

Q2

fetch のエラーが catch に入らないのはなぜですか?

A

HTTPエラーは例外にならず、ネットワークエラーのみ catch に入るためです。

Q3

FormData を送るときに Content-Type を指定してはいけない理由は?

A

ブラウザが boundary を含む適切な Content-Type を自動設定するためです。

Q4

fetch と XHR の POST はどちらが推奨されますか?

A

現代では fetch が推奨されます。コードが短く、Promise / async に対応しているためです。



まとめ

fetch API の POST は、
headers + body を指定するだけで簡単に実装できます。

  • JSON送信が最も一般的
  • async / await で読みやすくなる
  • HTTPエラーは例外にならないので注意
  • 用途に応じて FormDataURLSearchParams を使い分ける

API 連携の基礎として、fetchPOST は必ず押さえておきたい知識です。



関連記事

【JavaScript入門】JSONの扱い方|JSON.parse・JSON.stringifyの基本と実務での使い方を初心者向けに解説

この記事で分かること JSONとは何か(データ形式の基本) JSON.parse の使い方(文字列 → オブジェクト) JSON.stringify の使い方(オブジェクト → 文字列) API通信で …

【JavaScript入門】Promiseの基礎|非同期処理の仕組み・then/catchの使い方を初心者向けにわかりやすく解説

この記事で分かること Promiseとは何か(非同期処理の基本) Promiseの3つの状態(pending / fulfilled / rejected) then / catch の使い方 コール …

【JavaScript入門】async/awaitの使い方|Promiseをより簡単に書ける非同期処理の基本を初心者向けに解説

この記事で分かること async / await の基本構文 Promise をより読みやすく書く方法 fetch と組み合わせた実用的な書き方 try/catch によるエラー処理 実務での asy …

【JavaScript入門】XMLHttpRequest(XHR)の使い方|GET・POSTリクエストの実装方法を初心者向けに解説

この記事で分かること XMLHttpRequest(XHR)の基本構造 GETリクエストの書き方 POSTリクエストの書き方 readyState・status の扱い方 実務での注意点(非同期処理・ …

【JavaScript入門】Ajaxとは?仕組み・特徴・XMLHttpRequestを初心者向けにわかりやすく解説

この記事で分かること Ajaxとは何か(技術の組み合わせで成り立つ概念) 非同期通信の仕組みとメリット XMLHttpRequestの役割と特徴 Googleマップやサジェストで使われる理由 Ajax …

このブログは Xserver 上の WordPress で運用しています。
表示速度が速く、安定しているのでブログ初心者にもおすすめです。

レンタルサーバー エックスサーバー

-Ajax / fetch / API(非同期処理)

執筆者: