【JavaScript】画面遷移させないでformをsubmitさせる

更新日:2024/02/27

formタグでサーバーにリクエストを送ると画面遷移します。
しかし画面遷移させずにリクエストを送りたいというケースがあります。

その方法をお伝えします。

 

手順

  1. buttonタグでsubmitさせないように変更
  2. fetch() でサーバーにリクエストを送る

 

buttonタグでsubmitさせないように変更

buttonタグを押すと、デフォルトではsubmitされます。
このままだと画面遷移するので、submitさせないようにします。

submitさせないようにするには、type="button"を記述します。


<form id="form" action="/requesturl" method="post">
    <button type="button" onclick="mySubmit();">送信</button>
</form>

上の例は、送信ボタンを押すと mySubmit()関数を呼び出します。

 

fetch() でサーバーにリクエストを送る

次のようにすると、手動でsubmitさせることができます。

document.getElementById("form" ).submit();

しかし、これだと画面遷移します

そこで fetch()関数を使って、サーバーにリクエストを送信します。

fetch()関数使用例


const formSubmit = formId =>{
    const form = document.getElementById(formId);
    const arg = [form.action];
    if( form.method === undefined || form.method.toUpperCase() === "POST")
        arg.push({method:"POST",body:new FormData(form)} );

    return fetch( ...arg ).then( response => 
        response.status === 200 ? response.json() : Promise.reject(response.status)
      );
};

formのデータを送信するときは、基本的にPOSTで送信します。
GET送信するときはURLにパラメーターとして連結する必要がありますが、ここでは省略しています。

また、サーバーからの応答内容が json のケースを想定しています。
テキストの場合は response.text()、バイナリなら response.arrayBuffer() 等に変更してください。

次に、ボタンを押したときに呼び出される関数を作成します。

ボタンを押したときに呼び出される関数


const mySubmit = ( ) =>{
   formSubmit("form").then(e=>{
       alert("OK");
    }).catch(e=>alert(e));
};

更新日:2024/02/27

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。