• ガイド
  • Form App

Axiosを利用した導入方法

Axiosについて

Axiosは、ブラウザとNode.jsで動作するPromiseベースのHTTPクライアントです。Axiosのシンプルで柔軟なAPIを利用することでHTTPリクエストを簡単に送信することができる非常に使い勝手の良いライブラリです。

Fetch APIとの違いは、Fetch APIが一部ブラウザやNode.jsにおける標準APIであるのに対して、Axiosはnpm等のパッケージマネージャからインストールして利用するライブラリであるということが挙げられます。Axiosを利用するためには、 npm install 等のコマンドを実行して、あなたのプロジェクトにAxiosをインストールする必要があります。

また、Axiosは内部的にXMLHttpRequestを使ってHTTP通信を行います。そのため、Fetch APIのようなブラウザ互換性問題を気にする必要がほぼありません。もちろんInternet Explorerでも動作します。

より詳しい情報については、Axiosの公式サイトをご覧ください。

Axiosをプロジェクトにインストールする

前述の通り、Axiosはインストールして利用するタイプのライブラリであるためnpmやyarn、pnpm等を使ってパッケージをインストールする必要があります。

インストールについての詳細はここでは割愛します。

npm install --save axios

Axiosを使ってフォームを送信する

下記フォームに入力された値を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ボタンをクリックした際に、フォームからデータを抽出しAxiosを使ってForm AppのエンドポイントにPOSTリクエストを送信します。
ピュアなJavaScriptのみを利用した場合、次のようなコードになります。(React等のフレームワークを利用している場合は、stateから値を取り出すなど必要に応じて書き換えてください)

FormData形式で送信

<script>
  const form = document.getElementById("my-form");
  form.addEventListener("submit", submitFormData);

  function submitFormData(e) {
    e.preventDefault();

    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
    );

    axios
      .post("https://{spaceUid}.form.newt.so/v1/{formUid}", formData, {
        headers: {
          Accept: "application/json", // レスポンスをJSONで受け取る
        },
      })
      .then((response) => console.log(response))
      .catch((error) => console.log(error));
  }
</script>

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,
    };

    axios
      .post("https://{spaceUid}.form.newt.so/v1/{formUid}", data, {
        headers: {
          Accept: "application/json", // レスポンスをJSONで受け取る
        },
      })
      .then((response) => console.log(response))
      .catch((error) => console.log(error));
  }
</script>
Newt Made in Newt