
実現したいこと
非同期で送信した値をLaravel側で取得できるようにしたい。
前提
作成中のアプリケーションに検索機能を実装しようとしています。
ユーザーがinput要素に入力した値をフォームで送信し、Laravel側で取得したいのですが、うまくいきません。
発生している問題・エラーメッセージ
input要素のname属性がadminlteSearch
のため、コントローラで$searchTerm = $request->input('adminlteSearch');
としようとしましたが、結果はnullでした。
該当のソースコード
html
1<!-- 借り物のレイアウトになりますので、表示されているHTML構造を抜き出してきました --> 2<form class="form-inline" action="#" method="get"> 3 <input type="hidden" name="_token" value="***************************"> 4 <div class="input-group"> 5 <input class="form-control form-control-navbar" type="search" 6 name="adminlteSearch" placeholder="タスク検索" aria-label="タスク検索"> 7 <div class="input-group-append"> 8 <button class="btn btn-navbar" type="submit"> 9 <i class="fas fa-search"></i> 10 </button> 11 <button class="btn btn-navbar" type="button" data-widget="navbar-search"> 12 <i class="fas fa-times"></i> 13 </button> 14 </div> 15 </div> 16</form>
js
1searchButton.addEventListener('click', (e) => { 2 e.preventDefault(); 3 const form = searchButton.parentElement.parentElement.parentElement; 4 const formData = new FormData(form); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("GET", '/task/search', true); 7 XHR.responseType = "json"; 8 XHR.send(formData); 9 XHR.onload = () => { 10 // レスポンス後の処理 11 }; 12});
php
1public function searchTasks(Request $request) 2{ 3 $searchTerm = $request->input('adminlteSearch'); 4 // ↑この値がnull 5 // 処理を記述 6 return response()->json($response); 7}
試したこと
いろいろ試した結果、現在わかっていることは、次の3つです。
①JavaScriptのイベントは正常に発火している
②Laravelの指定したアクション(searchTasks)は動いている
③上記アクション内で$searchTermの値がnull
次のように、直接formDataを突っ込んでもダメでした。
js
1… 2// 変更前 3const formData = new FormData(form); 4// 変更後 5const formData = new FormData(form); 6const searchTerm = document.querySelector('input[name="adminlteSearch"]').value; 7formData.append('adminlteSearch', searchTerm); 8…
また、こちらを参照し、送信先URLを変更してみましたが、HTTPステータス404で戻ってきてしまい、どのように値を取得すれば良いのかわからない状況です。
js
1… 2// 変更前 3XHR.open("GET", '/task/search', true); 4// 変更後 5const searchTerm = document.querySelector('input[name="adminlteSearch"]').value; 6XHR.open("GET", '/task/search?keyword='+searchTerm, true); 7…
補足情報(FW/ツールのバージョンなど)
PHP: 8.2.1
Laravel: 9.50.2




回答1件
あなたの回答
tips
プレビュー