【Laravel】Ajaxで取得したデータをinputタグにvalueとして渡す方法

Laravel

こんにちは!

今回はLaravelで非同期通信処理ajaxを用いて取得したデータをinputタグにvalueとして渡す方法を解説していきます。

Laravelにおいて、更新処理をする際に該当となるレコードの情報を取得してきてモーダルで表示させるという処理を業務で行ったので、アウトプットとしてここに記述していきたいと思います。

ajax処理の基本的な書き方

まずはajaxの基本的な書き方から。

$(function(){
  $.ajax({
    type: "get", //HTTP通信の種類
    url:'/home', //通信したいURL
    dataType: 'json'
  })
  //通信が成功したとき
  .done((res)=>{
    console.log(res.message)
  })
  //通信が失敗したとき
  .fail((error)=>{
    console.log(error.statusText)
  })
});

こんな感じ。

更新処理

目的としては、変更ボタンを押すと変更画面モーダルが表示され、該当レコードのデータが変更画面に最初から入力されている状態を実現したい。

通常は画面を別のbladeファイルで分けて変更ボタンを押した際に該当レコードのidがリクエストとしてサーバーに送られ、ControllerやModelでそのidに紐づくデータを取り出してきて、変更画面に表示させるのが一般的だと思います。

ただし、今回は変更画面をモーダルで表示させたいので、リクエストされる該当レコードのidをブラウザ上で処理し、サーバーにはデータを送らず、Controllerにデータをそのまま返させます。そのデータをモーダル上で表示させるという処理を書いていきたいと思います。

# View
# edit.blade.php(Bootstrap)

<table class="table table-striped table-hover">
    <tr>
        <th>出荷数</th>
        <th>処理</th>
    </tr>
    <tr>
        <td>{{ $order_sipment->sipment_quantity }}</td>
        <td><button type=“button” class="btn btn-success" data-target=“#updateModal” data-toggle=“modal” data-quantity="{{ $order_sipment->sipment_quantity }}">変更</button></td>
    </tr>
</table>

<!— Modal —>
<div class=“modal fade” id=“updateModal” tabindex=“-1” aria-labelledby=“registerModalLabel" aria-hidden="true"
>
<div class="modal-dialog modal-dialog-fluid" role="document">

<form action=“{{ route(‘order_sipments.response’) }}” method=“post”>
    <div class=“col-2”>出荷数</div>
    <div class=“col-10”><input type=“number” class=“form-control” id=“order_sipment_quantity” name=“sipment_quantity”></div>
</form>

<style>
.modal-dialog-fluid {
  max-width: inherit;
  width: 98%;
  margin-left: 15px;
}
</style>


</div>
</div>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<script>
    $(function () 
       {
          let orderSipmentQuantity;

        $(‘button[id = “order_sipment_id”]’).click(function () 
                {
                $.ajaxSetup({
                    headers: {
                            // 決まり文句
                   “X-CSRF-TOKEN”: $(‘meta[name = “csrf-token”]’).attr(“content”), 
                             },
                     });
                // data()メソッドでボタン自身のdata-quantityの値を取得    
                    orderSipmentQuantity = $(this).data(‘quantity’);
                // いよいよajax処理を書く
               $.ajax({
                   // POST通信
                       type: “post”,
                    // ここでデータの送信先URLを指定。
                   url: “/order_sipments/response”
                   dataType: “json”
                   data: {
                         ‘quantity’: orderSipmentQuantity;
                       },
                     })

                 .then((res) => {
                     console.log(res);
                         // jQueryのval()メソッドで対象のidを持つタグにvalueとしてajaxで取得した値を入れる
                     $(‘#order_sipment_quantity’).val(res[‘quantity’]);
                      });
           .fail(error) => {
               console.log(error.statusText);
           });
         });

     })
</script>
# Route

Route::post('/order_sipments/response', [App\Http\Controllers\OrderSipmentController::class, 'response'])->name('order_sipments.response')->middleware('auth');
# Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class OrderSipmentController extends Controller 
{
    // リクエストされた値をそのまま返すだけ!
    public function response(Request $request)
    {
        return $request; 
    } 
}

肝としてはViewファイルのAjax処理の書き方ですね。

変更ボタンを押した際にAjaxで非同期にモーダル上のフォームのinputタグにvalueとして$order_sipment->sipment_quantityという値を与えます。

$order_sipment->sipment_quantityについては記述を省略しておりますが、DBの中のテーブルから持ってきた出荷数のデータの値になります。

Viewファイルで書いたAjax処理を行なったときにajaxの中で定義されているdataがControllerに行きますが、サーバーでは処理せず、Controllerでそのままdataを返しています。

そして返ってきたdataはajax処理の.then()の処理に移行し、この時にモーダル上のinputタグにvalueとして$order_sipment->sipment_quantityの値が入ります。

このような処理を行うことで、モーダル表示した際に該当レコードの出荷数の値がフォームに入力された状態で表示されるというわけです。

それでは、今回はこんなところで!

コメント

タイトルとURLをコピーしました