【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>
~
~
@endforeachCSRF対策として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){
//処理
}
}


