カテゴリ: 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でAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.2
Java&Spring記事人気No2
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.3
Java&Spring記事人気No3
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Symfony
Symfonyとは?PHPの堅牢なフレームワークの特徴と活用シーン