【Laravel】LaravelでAjax(jQuery)を使用する
LaravelでjQueryによるAjax通信を行うための手順をメモします。
環境:Laravel Framework 5.8、 jQuery 3.3.1
1. ルーティングの作成
クライアントからAjax通信先となるコントローラーへのルーティングをroutes/web.phpへ作成する。
routes/web.php
(ルーティングの種類をajaxのHTTPメソッドに合わせる)
Route::get('/delete/{file}', 'DeleteController@execute');
2. Ajax関数を記述
(public/jsディレクトリ内のJavaScriptファイル)
var id = $('div.item').data('id'); $.ajax({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, url: '/delete/' + id, type: 'GET', id: id, success: function(){ //通信が成功した場合の処理 }, error: function(){ //通信が失敗した場合の処理 } });
(クライアント側)
<head> <meta name="csrf-token" content="{{ csrf_token() }}"> ~ ~ </head>
@foreach($files as $file) <div class="item" data-id="{{ $file->id }}"> ~ </div> ~ ~ @endforeach
CSRF対策としてheaders(リクエストヘッダ)へトークンを指定。
指定するトークンはクライアント側のhead内、meta要素へ埋め込んで用意しておく。
type: ‘POST’とした場合こちらを行わないと※エラー「419 (unknown status)」が発生します。
※ブラウザのコンソールにエラーメッセージが出力される。
urlパスへ、値(id)をバインドしコントローラーのメソッドの引数に渡せるようにしている。
3.(通信先)app/Http/Controllers/DeleteController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\file; class DeleteController extends Controller { public function execute(File $file){ //処理 } }