jQuery: AJAX でフォームを送信する
- jQuery で AJAX を使用してフォームを送信する: 直接的なアプローチ
- jQuery フォーム プラグインを使用して、jQuery で AJAX を使用してフォームを送信する
-
jQuery で AJAX を使用してフォームを送信する:
FormData
アプローチ
この記事では、AJAX-in-jQuery を使用してフォームを送信する 3つの方法について説明します。 1つ目は AJAX-in-jQuery を直接使用する方法で、2つ目は AJAX Form Plugin
を使用する方法です。
3 番目の方法では、AJAX を使用して送信する前に、FormData
オブジェクトを使用してフォーム データを取得します。
jQuery で AJAX を使用してフォームを送信する: 直接的なアプローチ
外部ライブラリや特別なものがないため、これを直接アプローチ
と呼んでいます。 まず、HTML フォームをセットアップし、名前属性が正しいことを確認します。
次に、jQuery を使用して次の操作を行います。
- jQuery を使用して、フォームの送信をリッスンします。
- デフォルトの送信動作を防止します。
- jQuery で
ajax()
メソッドを使用して、AJAX 接続を開始します。 ajax()
のtype
プロパティがPOST
であることを確認します。url
プロパティの値が HTML のaction
属性の値であることを確認します。data
プロパティの値がすべてのフォーム入力のシリアル化された形式であることを確認します。success
プロパティの値として関数を使用して、返されたデータを処理します。error
プロパティの値として関数を使用してエラーを処理します。
これらの手順のコード実装は、次のコードにあります。 HTML フォーム属性の値は、フォームを処理
する PHP スクリプトであることに注意してください。
今回は、送信されたデータのみをコンソールに表示します。 ただし、フォーム データをデータベースに送信することはできます。 PHP スクリプトは、この記事の最後にあります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>01-jQuery AJAX Submit form</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh; }
form { border: 3px solid #1560bd; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$("#html_form").submit(function(event) {
// Prevent the default submit behavior
event.preventDefault();
// "this" refers to the current HTML form
let current_html_form = $(this);
let action_url = current_html_form.attr('action');
$.ajax({
type: "POST",
url: action_url,
data: current_html_form.serialize(), // Turn the form elements into a usable string
success: function (data) {
console.log(data);
},
error: function (data) {
alert("An error occurred during form submission");
},
});
});
</script>
</body>
</html>
出力:
jQuery フォーム プラグインを使用して、jQuery で AJAX を使用してフォームを送信する
このメソッドは、jQuery で AJAX を使用してフォームを送信しますが、異なる方法で送信します。 今回は jQuery Form Plugin の ajaxForm
メソッドを使用します。
次の例外を除いて、AJAX を使用してフォームを送信する方法は同じです。
- jQuery Form Plugin をスクリプトにインポートします。
- プラグインの
ajaxForm
メソッドを使用します。 舞台裏で、これはフォーム送信を処理します。 url
プロパティの値は、送信されたデータを処理するスクリプトの名前です。$.ajax()
と書くのではなく、$(form_selector).ajaxForm()
と書きます。form_selector
は、HTML フォームのクラスまたは ID 名です。
これらの手順を次のコードに実装しました。 次の画像で出力を確認できます。
この記事の最後に PHP スクリプトがあります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>02-jQuery-AJAX-with-AJAX-Form.html</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js" integrity="sha512-YUkaLm+KJ5lQXDBdqBqk7EVhJAdxRnVdT2vtCzwPHSweCzyMgYV/tgGF4/dCyqtCC2eCphz0lRQgatGVdfR0ww==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh; }
form { border: 3px dotted #0a9; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$(function(){
$('#html_form').ajaxForm({
type: "POST",
url:'process-jquery-form.php',
success: function (data) {
console.log(data);
},
error: function (data) {
alert("An error occurred during form submission");
},
})
});
</script>
</body>
</html>
出力:
jQuery で AJAX を使用してフォームを送信する: FormData
アプローチ
この方法は、外部ライブラリが関与しないため、直接的な方法と同じです。 しかし今回は、FormData
オブジェクトを使用してフォーム データを取得します。
ajax()
メソッドの残りのステップは、次の追加を除いて同じままです。
processData
プロパティを追加し、その値をfalse
に設定します。contentType
プロパティを追加し、その値をfalse
に設定します。error
プロパティの関数には、引数としてjQXHR
、textStatus
、およびerrorMessage
が必要です。 次に、errorMessage
引数を使用してエラー メッセージを表示します。
次のコードは、これを行う方法を示しています。 PHP スクリプトについては、次のセクションで説明します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>03-jQuery-AJAX-with-FormData.html</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh;}
form { border: 3px dashed #1975c7; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$("#html_form").submit(function(event) {
// Prevent the default submit behavior
event.preventDefault();
let current_html_form = $(this);
let action_url = current_html_form.attr('action');
// Grab the form data using the FormData Object
// Later, we'll use the data in the ajax request.
let form_data = new FormData(document.getElementById('html_form'));
$.ajax({
type: "POST",
url: action_url,
data: form_data,
processData: false,
contentType: false,
success: function (data) {
console.log(data);
},
error: function (jQXHR, textStatus, errorMessage) {
console.log(errorMessage);
},
});
});
</script>
</body>
</html>
出力:
HTML フォーム用の PHP スクリプト
以下は、この例で HTML フォームを処理するために使用される PHP スクリプトです。 process-jquery-form.php
として作業ディレクトリに保存できます。
<?php
// We detect an AJAX request from jQuery before
// processing the form data.
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
// Here, we show the first and last names.
// In your application, you can send them
// to your database.
echo "Hello " . htmlspecialchars($first_name) ." " . htmlspecialchars($last_name);
}
}
?>
Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedIn