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