サンプルコードで学ぶ! jQueryでFormDataオブジェクトをAjaxリクエストで送信する
jQueryを使用してFormDataオブジェクトをAjaxリクエストで送信するには、以下の手順が必要です。
- FormDataオブジェクトを作成する
- Ajaxリクエストの設定を行う
- Ajaxリクエストを送信する
詳細
FormDataオブジェクトは、フォームデータを表すオブジェクトです。FormDataオブジェクトを作成するには、new FormData()
コンストラクタを使用します。
const formData = new FormData();
Ajaxリクエストの設定には、$.ajax()
メソッドを使用します。$.ajax()
メソッドには、以下のオプションを指定することができます。
url
: リクエスト先のURLtype
: リクエストの種類("GET"、"POST"など)data
: 送信するデータcontentType
: 送信データのコンテンツタイプprocessData
: 送信データの加工を行うかどうかcache
: キャッシュを使用するかどうか
data
オプションにFormDataオブジェクトを指定します。contentType
オプションをfalse
に設定します。
例
$.ajax({
url: '/api/upload',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function(data) {
// 成功時の処理
},
error: function(error) {
// エラー時の処理
}
});
$.ajax()
メソッドを実行することで、Ajaxリクエストを送信します。
補足
- FormDataオブジェクトは、ファイルアップロードにも使用できます。
- Ajaxリクエストの送信前に、フォームデータのバリデーションを行うことをおすすめします。
- jQueryプラグインを使用して、FormDataオブジェクトを簡単に送信することもできます。
- jQuery Form Plugin: https://jquery.form.js/
注意事項
- ブラウザによっては、FormDataオブジェクトに対応していない場合があります。
HTML
<form id="form">
<input type="text" name="name" value="John Doe">
<input type="file" name="file">
<button type="submit">送信</button>
</form>
JavaScript
$(function() {
$('#form').submit(function(event) {
event.preventDefault();
// FormDataオブジェクトを作成
const formData = new FormData(event.target);
// Ajaxリクエストの設定
$.ajax({
url: '/api/upload',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function(data) {
// 成功時の処理
console.log(data);
},
error: function(error) {
// エラー時の処理
console.log(error);
}
});
});
});
解説
#form
要素のsubmit
イベントにイベントハンドラを設定します。- イベントハンドラ内で、
event.preventDefault()
メソッドを使用して、フォームの送信をキャンセルします。 new FormData(event.target)
を使用して、フォームデータからFormDataオブジェクトを作成します。$.ajax()
メソッドのsuccess
オプションに、成功時の処理を記述します。
実行
上記のコードをHTMLファイルに記述し、ブラウザで開きます。フォームの送信
ボタンをクリックすると、FormDataオブジェクトがAjaxリクエストで送信されます。
- このサンプルコードは、ファイルアップロードにも使用できます。
以上、サンプルコードについての解説でした。
jQueryでFormDataオブジェクトをAjaxリクエストで送信する他の方法
$.serialize()
メソッドを使用して、フォームデータをシリアル化し、それをAjaxリクエストのdata
オプションに指定することができます。
$.ajax({
url: '/api/upload',
type: 'POST',
data: $('#form').serialize(),
success: function(data) {
// 成功時の処理
},
error: function(error) {
// エラー時の処理
}
});
注意点
$.serialize()
メソッドは、ファイルデータを送信できません。
jQuery Form Pluginは、フォームデータを送信するためのプラグインです。
$('#form').ajaxForm({
url: '/api/upload',
success: function(data) {
// 成功時の処理
},
error: function(error) {
// エラー時の処理
}
});
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/upload');
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.send(formData);
xhr.onload = function() {
if (xhr.status === 200) {
// 成功時の処理
} else {
// エラー時の処理
}
};
javascript jquery ajax