- ガイド
- Form App
Fetch APIを利用した導入方法
Table of contents
Fetch API について
Fetch APIとは、HTTP通信を行うことでリソースを取得したり作成したりすることのできるJavaScript APIです。このAPIは XMLHttpRequest と似ていますが、より柔軟で強力な機能を提供します。
※Fetch APIはInternet Explorerでは対応されておらず、その他ブラウザについてもそれぞれ対応状況が異なるため、互換性については十分検討した上でお使いください。(CanIUse.comで互換表を確認できます)
Fetch API を使ってフォームを送信する
下記フォームに入力された値をFetch APIを使って送信します。
<form id="my-form">
<input type="text" name="name" />
<input type="email" name="email" />
<textarea name="body"></textarea>
<input type="file" name="attachment" />
<button type="submit">Submit</button>
</form>
Submitボタンをクリックした際に、フォームからデータを抽出しFetch APIを使ってForm AppのエンドポイントにPOSTリクエストを送信します。
ピュアなJavaScriptのみを利用した場合、次のようなコードになります。(React等のフレームワークを利用している場合は、stateから値を取り出すなど必要に応じて書き換えてください)
FormData形式で送信
<script>
const form = document.getElementById("my-form");
form.addEventListener("submit", submitFormData);
function submitFormData(e) {
e.preventDefault();
// 送信データをFormData形式で作成
const formData = new FormData();
formData.append("name", document.querySelector('input[name="name"]').value);
formData.append("email", document.querySelector('input[name="email"]').value);
formData.append("body", document.querySelector('input[name="body"]').value);
formData.append("attachment", document.querySelector('input[name="attachment"]').value);
// Fetch APIを使ってエンドポイントにPOSTリクエストを送信
fetch("https://{spaceUid}.form.newt.so/v1/{formUid}", {
method: "POST",
body: formData,
headers: {
// Acceptヘッダーでapplication/jsonを指定してレスポンスをJSONデータとして受け取る
Accept: "application/json",
},
})
.then((response) => console.log(response))
.catch((error) => console.log(error));
}
</script>
fetch関数のheadersパラメータにContent-Type(例:
"Content-Type": "multipart/formdata; boudary=xxxxx;"
)を追加しないでください。fetch関数内で自動付与されるboundary文字列との差分が発生し、FormDataを正常に送信できなくなります。
JSON形式で送信
<script>
const form = document.getElementById("my-form");
form.addEventListener("submit", submitFormData);
function submitFormData(e) {
e.preventDefault();
// 送信データをオブジェクトとして作成
const data = {
name: document.querySelector('input[name="name"]').value,
email: document.querySelector('input[name="email"]').value,
body: document.querySelector('input[name="body"]').value,
attachment: document.querySelector('input[name="attachment"]').value,
};
fetch("https://{spaceUid}.form.newt.so/v1/{formUid}", {
method: "POST",
body: JSON.stringify(data), // JSON文字列化して送信
headers: {
"Content-Type": "application/json", // JSON形式でデータを送信することをサーバーに伝える
Accept: "application/json", // レスポンスをJSONで受け取る
},
})
.then((response) => console.log(response))
.catch((error) => console.log(error));
}
</script>