Fetch APIを使用してAjaxを実装する

いままでjQueryの$.ajax({})を使用して実装していたフォーム(フォーム自体はPHPで処理)の処理をFetch APIに置き換えたので、そのコード。

フォーム部分html

<div class="form_area">
	<form id="form">
		<p><textarea name="message"></textarea></p>
    <p><button type="submit" class="button">送信</button></p>
	</form>
	<div id="error"></div>
	<div id="result"></div>
</div>

<div id="error"></div>には処理失敗時エラーメッセージ、<div id="result"></div>には処理成功時送信完了メッセージを表示させる。

Javascript

window.addEventListener('DOMContentLoaded', function() {
  const formData = document.getElementById('form');
  const formResult = document.getElementById('result');
  const formError = document.getElementById('error');
  const btn = document.querySelector('.button');
  const fd = new FormData();

  btn.addEventListener('click', (e)=> {
		e.preventDefault(); //submit処理をキャンセル

    const input_message = document.querySelector('textarea[name="message"]');
    fd.append('message', input_message.value);

		fetch( 'url', {
			method: 'POST',
			body: fd
		})
    .then(response => {
      if(!response.ok) {
        console.error('サーバーエラー');
        formError.innerHTML = '<p style="color: #f00;">エラーで送信できませんでした</p>';
      }
      response => response.json()
      formData.reset(); //送信したらtextareaの中身をリセットする
      formResult.innerHTML = '<p>送信ありがとうございます!</p>';
    })
		.catch((error) => {
      console.error(error);
      formError.innerHTML = '<p style="color: #f00;">エラーで送信できませんでした</p>';
		});
  });
});

fetch( 'url', {})のurlは実際にフォームを処理するプログラム(今回はPHP)のファイルパスを記述する。

(おまけ)jQueryの場合

	$('#form').submit(function(e) {
		e.preventDefault(); //submit処理をキャンセル
		
		$('#error').empty();
		const form_data = $('form').serialize(); //入力値を変数に格納
		
		//send to Ajax
		$.ajax({
			url: 'url',
			type: 'POST',
			data: form_data
		}).done(function(data, textStatus, jqXHR) {
      $('form')[0].reset();
      $('#result').html('<p>送信ありがとうございます!</p>');
		}).fail(function(jqXHR, textStatus, errorThrown) {
      $('#result').html('<p>送信されませんでした…</p>');
		});
	});