LaravelのJSONの送信と受信のサンプルです。
jQueryのajaxで通信します。
確認環境 ・Laravel 5.7 ・PHP 7.2.8 ・XAMPP 7.2.8 ・Windows 10 |
目次
環境
このサンプルでは、以下のファイルを使用します。
- web.php
- index.blade.php
- MainController.php
最初の画面の表示は以下のURLを入力します。
http://localhost/testlaravel1/public/test1
web.phpのファイル
web.phpです。(/routes/web.php)
<?php
Route::get('/test1',function () {
return view('index');
});
Route::post('/test1','MainController@write1');
3,6行目は、getとpostで別にしています。
JSONを送受信するファイル
JSONを送受信するファイルです。(/resources/views/index.blade.php)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>submit</title>
</head>
<body >
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(function() {
$("#button1").click(function() {
var json1 = {
"bangou": "1",
"name": "鈴木"
};
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
$.ajax({
url:"/testlaravel1/public/test1",
type:"post",
contentType: "application/json",
data:JSON.stringify(json1),
dataType:"json",
}).done(function(data1,textStatus,jqXHR) {
$("#p1").text(jqXHR.status); //例:200
console.log(data1.code); //1
console.log(data1.name); //eigyou
$("#p2").text(JSON.stringify(data1));
}).fail(function(jqXHR, textStatus, errorThrown){
$("#p1").text("err:"+jqXHR.status); //例:404
$("#p2").text(textStatus); //例:error
$("#p3").text(errorThrown); //例:NOT FOUND
}).always(function(){
});
});
});
</script>
<input type="button" value="ajaxで送信" id="button1">
</html>
5,21-23行目は、CSRF対策で記述が必要です。
参考:https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
17-20行目は、送信するJSONです。
29行目のdataTypeは、サーバから返されるデータの種類を指定します。
ただし、"json"を指定すると、JavaScriptオブジェクトを返す仕様になっています。
jQuery公式サイトのdataType参照。「"json": Evaluates the response as JSON and returns a JavaScript object. 」http://api.jquery.com/jQuery.ajax/
34行目は、stringifyメソッドでJavaScriptオブジェクトをJSONに変換しています。
コントローラのファイル
コントローラのファイルです。(/app/Http/Controllers/MainController.php)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//use Request;
class MainController extends Controller
{
public function write1(Request $request)
{
$json1 = $request->input('bangou');
//echo 'a: '.$json1;
$json2 = $request->input('name');
//echo 'b: '.$json2;
// $data1 = ['code' => '001', 'name' => 'eigyou'];
// return $data1;
return response()->json([
'code' => '1',
'name' => 'eigyou'
]);
}
}
12,14行目は、JSONのキーを指定して値を取得しています。
17,18行目または20-23行目は、レスポンスとしてJSONを返します。
https://laravel.com/docs/5.7/requests#retrieving-input
https://laravel.com/docs/5.7/responses#json-responses
関連の記事
PHP LaravelのインストールとHello Worldを表示する手順(Windows10)
PHP Laravel フォームの値を別画面に渡すサンプル
PHP LaravelのMySQLに接続してselectするサンプル