【保存版】JavaScriptでフォーム送信時にPOSTデータを送信する方法
JavaScript、Ajax、フォームを使用した XMLHttpRequest による POST データ送信
このチュートリアルを完了するには、以下の知識が必要です。
- HTML、CSS、および JavaScript の基本知識
- Ajax の基本的な概念
- XMLHttpRequest オブジェクト
手順
- HTML フォームを作成する
まず、送信するデータを含む HTML フォームを作成する必要があります。この例では、ユーザーの名前と電子メールアドレスを収集するシンプルなフォームを作成します。
<form id="myForm">
<label for="name">名前:</label>
<input type="text" id="name" name="name">
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email">
<button type="submit">送信</button>
</form>
- JavaScript イベントハンドラーを追加する
次に、フォーム送信時に実行される JavaScript イベントハンドラーを追加する必要があります。このハンドラーは、XMLHttpRequest オブジェクトを作成し、フォームデータを使用して POST リクエストを送信します。
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
event.preventDefault(); // デフォルトのフォーム送信をキャンセル
const name = document.getElementById('name').value;
const email = document.getElementById('email').value;
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/'); // 送信先のURLを指定
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
if (xhr.status === 200) {
console.log('送信成功!');
} else {
console.error('送信失敗:', xhr.statusText);
}
};
xhr.send('name=' + encodeURIComponent(name) + '&email=' + encodeURIComponent(email));
});
このコードでは、以下の処理が行われます。
event.preventDefault()
は、ブラウザのデフォルトのフォーム送信をキャンセルし、JavaScript で送信を処理できるようにします。- フォーム要素の値を取得し、変数
name
とemail
に格納します。 XMLHttpRequest
オブジェクトを作成し、open()
メソッドを使用して、POST リクエストと送信先の URL を指定します。setRequestHeader()
メソッドを使用して、Content-Type ヘッダーをapplication/x-www-form-urlencoded
に設定します。これは、送信データが URL エンコードされていることをサーバーに通知します。onload
イベントハンドラーは、リクエストが完了したときに実行されます。ステータスコードが 200 の場合は、送信が成功したことを示します。それ以外の場合は、エラーが発生したことを示します。send()
メソッドを使用して、フォームデータを含む POST リクエストを送信します。
- サーバー側のスクリプトを作成する
最後に、送信されたデータを処理するサーバー側のスクリプトを作成する必要があります。このスクリプトは、通常、PHP、Python、または Node.js などのサーバー側言語で記述されます。
PHP 例:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
echo "名前: $name\n";
echo "メールアドレス: $email\n";
このスクリプトは、$_POST
スーパーグローバル変数を使用して、送信されたフォームデータにアクセスします。
補足
- この例では、URL エンコードされたデータを送信するために
application/x-www-form-urlencoded
Content-Type ヘッダーを使用しています。JSON データを送信する場合は、Content-Type ヘッダーをapplication/json
に設定する必要があります。 - より複雑なフォームデータを送信するには、
FormData
オブジェクトを使用できます。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>POST データ送信</title>
</head>
<body>
<h1>POST データ送信</h1>
<form id="myForm">
<label for="name">名前:</label>
<input type="text" id="name" name="name">
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email">
<button type="submit">送信</button>
</form>
<script>
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
event.preventDefault();
const name = document.getElementById('name').value;
const email = document.getElementById('email').value;
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
if (xhr.status === 200) {
console.log('送信成功!');
} else {
console.error('送信失敗:', xhr.statusText);
}
};
xhr.send('name=' + encodeURIComponent(name) + '&email=' + encodeURIComponent(email));
});
</script>
</body>
</html>
サーバー側スクリプト (PHP)
<?php
$name = $_POST['name'];
$email = $_POST['email'];
echo "名前: $name\n";
echo "メールアドレス: $email\n";
説明
- この HTML コードは、フォーム、ラベル、入力フィールド、送信ボタンを含むシンプルなフォームを作成します。
- フォームの
id
はmyForm
に設定されています。 - 各入力フィールドには、
name
属性とid
属性が設定されています。これらの属性は、JavaScript でフォームデータにアクセスするために使用されます。 - 送信ボタンには、
type="submit"
属性が設定されています。これにより、フォームが送信されるときに JavaScript イベントハンドラーが呼び出されます。
JavaScript:
- この JavaScript コードは、フォーム送信時に実行されるイベントハンドラーを定義します。
- イベントハンドラーは、以下の処理を実行します。
- スクリプトは、送信された名前と電子メールアドレスを単にコンソールにエコー出力します。
実行方法
- このコードを HTML ファイルと PHP ファイルに保存します。
- HTML ファイルを Web ブラウザで開きます。
- フォームに名前と電子メールアドレスを入力し、送信ボタンをクリックします。
- サーバー側スクリプトの出力を見るために、サーバーコンソールを確認します。
このサンプルコードは、JavaScript、Ajax、フォームを使用して XMLHttpRequest を介して POST データを送信する方法を理解するための出発点として使用できます。必要に応じて、独自の要件に合わせてコードをカスタマイズすることができます。
JavaScript、Ajax、フォームを使用した POST データ送信のその他の方法
jQuery を使用する
jQuery は、人気のある JavaScript ライブラリであり、Ajax を含む多くの共通タスクを簡素化するための便利なメソッドを提供します。以下の例では、jQuery を使用して前述の例と同じように POST リクエストを送信する方法を示します。
$(document).ready(function() {
$('#myForm').submit(function(event) {
event.preventDefault();
const name = $('#name').val();
const email = $('#email').val();
$.ajax({
url: 'https://example.com/',
type: 'POST',
data: {
name: name,
email: email
},
success: function() {
console.log('送信成功!');
},
error: function(xhr, status, error) {
console.error('送信失敗:', xhr.statusText);
}
});
});
});
このコードは、jQuery の ajax()
メソッドを使用して、POST リクエストを送信します。このメソッドは、オプションのパラメータの長いリストを受け取り、リクエストを構成するために使用できます。
Fetch API は、より新しい JavaScript API であり、Promise を使用して非同期リクエストを処理するよりモダンな方法を提供します。以下の例では、Fetch API を使用して前述の例と同じように POST リクエストを送信する方法を示します。
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
event.preventDefault();
const name = document.getElementById('name').value;
const email = document.getElementById('email').value;
const formData = new FormData(form);
fetch('https://example.com/', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('送信成功!');
})
.catch(error => {
console.error('送信失敗:', error);
});
});
このコードは、Fetch API の fetch()
メソッドを使用して、POST リクエストを送信します。このメソッドは、Promise を返します。この Promise は、リクエストが完了したら解決され、レスポンスデータにアクセスできるようにします。
FormData
オブジェクトは、フォームデータを表すもう 1 つの便利な方法です。これは、キーと値のペアのリストとしてデータを格納します。以下の例では、FormData
オブジェクトを使用して前述の例と同じように POST リクエストを送信する方法を示します。
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
event.preventDefault();
const name = document.getElementById('name').value;
const email = document.getElementById('email').value;
const formData = new FormData();
formData.append('name', name);
formData.append('email', email);
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
if (xhr.status === 200) {
console.log('送信成功!');
} else {
console.error('送信失敗:', xhr.statusText);
}
};
xhr.send(formData);
});
このコードは、FormData
オブジェクトを使用して、フォームデータを作成します。次に、append()
メソッドを使用して、キーと値のペアをオブジェクトに追加します。最後に、XMLHttpRequest
オブジェクトを使用して、FormData
オブジェクトを含む POST リクエストを送信します。
JavaScript、Ajax、フォームを使用して POST データを送信するには、さまざまな方法があります。上記で説明した方法は、最も一般的でよく使用される方法のほんの一例です。使用する方法は、個々のニーズと好みによって異なります。
javascript ajax forms