カテゴリ: Laravel 更新日: 2025/12/12

Laravelで非同期フォーム送信(AJAX + Axios)の基本

Laravelで非同期フォーム送信(AJAX + Axios)の基本
Laravelで非同期フォーム送信(AJAX + Axios)の基本

先生と生徒の会話形式で理解しよう

生徒

「Laravelでフォームを送信するときにページをリロードせずに処理したいんですが、できますか?」

先生

「はい、できます。JavaScriptのAxiosというライブラリを使うと、非同期でフォーム送信が可能です。ページを再読み込みせずにデータを送信して、結果だけ表示できます。」

生徒

「非同期って何ですか?難しそうです。」

先生

「非同期とは、順番を待たずに処理を行うことです。例えば、料理を作りながら洗濯もするイメージです。LaravelではAxiosで非同期にデータを送ることで、ユーザーの操作感をスムーズにできます。」

1. Axiosの準備とHTMLフォーム

1. Axiosの準備とHTMLフォーム
1. Axiosの準備とHTMLフォーム

まずはHTMLフォームを作ります。Bladeテンプレートで書く場合は以下のようにします。


<form id="ajaxForm">
    @csrf
    <input type="text" name="name" class="form-control mb-2" placeholder="名前を入力">
    <button type="submit" class="btn btn-primary">送信</button>
</form>

<div id="message" class="mt-2"></div>

ここではid="ajaxForm"でフォームを特定し、id="message"で送信結果を表示します。

2. JavaScriptでAxiosを使った非同期送信

2. JavaScriptでAxiosを使った非同期送信
2. JavaScriptでAxiosを使った非同期送信

次にBlade内でAxiosを使ってフォーム送信を非同期化します。


<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
document.getElementById('ajaxForm').addEventListener('submit', function(e){
    e.preventDefault(); // ページリロードを防ぐ

    let formData = new FormData(this);

    axios.post("{{ route('ajax.submit') }}", formData)
        .then(function(response){
            document.getElementById('message').innerHTML = '<div class="alert alert-success">' + response.data.message + '</div>';
        })
        .catch(function(error){
            document.getElementById('message').innerHTML = '<div class="alert alert-danger">送信に失敗しました</div>';
        });
});
</script>

ポイントはe.preventDefault()で通常の送信を止め、axios.postでデータを送るところです。送信成功時と失敗時に

でメッセージを表示しています。

3. Laravelルートとコントローラ

3. Laravelルートとコントローラ
3. Laravelルートとコントローラ

次にルートとコントローラを設定します。


Route::post('/ajax-submit', [FormController::class, 'ajaxSubmit'])->name('ajax.submit');

public function ajaxSubmit(Request $request)
{
    $name = $request->input('name');

    // 保存処理やバリデーションも可能
    // 例: User::create(['name' => $name]);

    return response()->json([
        'message' => $name . 'さんの送信が完了しました!'
    ]);
}

response()->json()でJSON形式のレスポンスを返すことで、Axiosで簡単に扱えます。

4. 非同期送信のメリットと注意点

4. 非同期送信のメリットと注意点
4. 非同期送信のメリットと注意点
  • ページ全体をリロードせずにデータを送信できるため、ユーザー体験が向上する
  • 複数のフォームや部分更新にも対応しやすい
  • バリデーションやエラーハンドリングをJSONで返すことで柔軟に表示できる
  • Axiosを使うとコードがシンプルで理解しやすい
  • CSRFトークンを忘れずに送信することが重要(@csrfで自動対応可能)
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)