Fetch APIからPOST送信のdataパラメータを設定する2つの方法

JavaScriptでPOSTリクエストを送りたい場合…

AjaxではなくFetch APIを使うことがあります。

そのとき悩むのが次のこと

POST送信時のdataパラメータの渡し方

Ajaxとは少しだけ渡し方が違うので、
記憶を整理するために方法をまとめます。

Ajaxだとdataに直接パラメータを渡せるが…

AjaxはHTTPリクエストを送るのに超便利です。

例えば適当なRest APIにPOST送信する場合を考えます。

▼ このコード例みたいに簡単に書ける

上記コードのようにPOST送信のパラメータをオブジェクトとして渡せます。キー・値のペアを定義するだけだし、とても分かりやすいです。

Ajaxは直観的に分かりやすい

Ajaxと違ってFetch APIではこれができない

一方のFetch APIの場合…

先ほどのAjaxみたいなパラメータ渡しはできません。

▼ こういうコードを書くのはNG

Ajaxに慣れてると動くのを期待してしまいます。

でも残念ながらAjaxのように気が利かないので、bodyにキー・ペアのオブジェクトを渡すことはできません。そして今後も仕様が変わることはないでしょう。

そこで次から紹介する2つの方法が使えます。

方法1.FormDataでPOSTパラメータを渡す

方法の1つ目はFormDataを使うこと

これは後述の方法より少し面倒です。

▼ FormDataを使ったシンプルなPOSTリクエスト例

▼ FormDataに関する詳細

FormData インターフェイスは、XMLHttpRequest.send() メソッドを用いることで簡単に送信が可能な、フォームフィールドおよびそれらの値から表現されるキーと値のペアのセットを簡単に構築する手段を提供します。これは、エンコーディングタイプを "multipart/form-data" に設定した場合にフォームが使用するものと同じ形式を使用します。

引用元 : https://developer.mozilla.org/ja/docs/Web/API/FormData

キー・値のペアセットを構築するために用意されています。普通にオブジェクトを渡せば?と思うけど、パラメータ変数を安全に構築する目的もあるかも

あとFormData.append()でファイル送信も可能です。

▼ 詳しくはFormData.append()を参照

ユーザーから選択されたFileを直接渡せるので、
自分でアレコレしなくていいのが利点かもしれません、

方法2.JSON文字列でPOSTパラメータを指定

これはAjaxに近いやり方です。

キー・値のPOSTパラメータを定義、
それを文字列化してbodyに指定する方法です。

言葉だと分かりにくいのでコード例を載せます。

▼ JSONでPOSTパラメータ指定するリクエスト例

上記のようにキー・値のペアオブジェクトを JSON.stringify()  により文字列化、それをbodyに渡せばOKです。ただしContent-Typeとして 'application/json'  の明示が必須です。

こちらはよりAjax的なので分かりやすい

POST・HTTPリクエストなんかの関連記事

ついでにPOSTリクエストの関連記事を紹介

▼ PostmanでPost送信のdataにランダム変数を使う方法

もしかしたら役立つかもしれません。

よければご覧ください。

やり方が分からないと少し戸惑うかも

以上、Fetch APIでのPOST送信のdataパラメータ設定でした。

やり方が分からないと少し戸惑うかもしれません。

個人的にはJSON文字列で渡すのが分かりやすいです。