質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

185閲覧

LaravelでAPIリクエスト時に勝手にリダイレクトされてしまう

shark-

総合スコア3

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2025/03/08 09:39

編集2025/03/08 09:59

実現したいこと

  • LaravelでAPIリクエスト時に勝手にリダイレクトされないようにしたいです。

前提

Laravelのスターターキットを使用して、Reactとデフォルトの認証機能を選択して、アプリを構築しました。
デフォルトで生成されていたファイルなどはそのままにしています。

発生している問題・エラーメッセージ

フロントエンド側でAPIリクエストを送信した際に、処理は成功してステータスコード200が返ってくるのですが、その際に現在のURLにリダイレクト(もしくはリロード?)が発生してしまいます(JSONのレスポンスを返すようにしています)。

リダイレクトだと思った理由は、ページがリロードされているのと、コンソールに「http://localhost:8000/home に移動しました」というメッセージが表示されていたため、そう思いました。

該当のソースコード

該当のAPIリクエスト部分 const handleAddTodo = async () => { const options: RequestInit = { headers: { 'Content-Type': 'application/json', }, method: 'POST', body: JSON.stringify({ name: todoName }), }; const res = await fetch('/api/todos', options); const json = await res.json(); console.log(json); }; return ( <form onSubmit={(e) => { e.preventDefault(); handleAddTodo(); }} > <input type="text" value={todoName} onChange={(e) => { setTodoName(e.target.value); }} /> <button>add</button> </form> );

Laravel側の処理

1Route::post('/todos', function(Request $request): JsonResponse { 2 return processFileAndRespond(JSON_FILE_PATH, function($fileData) use ($request) { 3 // 新しいTodoを作成する 4 $nextId = max(array_column($fileData['todos'], 'id')) + 1; 5 $newTodo = [ 6 'id' => $nextId, 7 'name' => $request->name, 8 'isCompleted' => false, 9 ]; 10 // Todos追加 11 $fileData['todos'][] = $newTodo; 12 // ファイル上書き保存 13 Storage::put(JSON_FILE_PATH, json_encode($fileData, JSON_PRETTY_PRINT)); 14 15 return $newTodo; 16 }); 17}); 18 19function processFileAndRespond(string $filePath, ?callable $callbackFunc = null): JsonResponse { 20 // ファイルが存在するかチェック 21 if (!Storage::exists($filePath)) { 22 return response()->json(['message' => '指定のパスにファイルが存在しませんでした。'], 404); 23 } 24 // JSONファイルをデコードして取得 25 $jsonData = Storage::json($filePath); 26 // ファイルの内容更新 27 if($callbackFunc) { 28 $jsonData = $callbackFunc($jsonData); 29 } 30 31 return response()->json(['data'=> $jsonData], 200); 32};

試したこと

チャットGPTに相談しました。
Laravelの公式ドキュメントを見ました。
https://laravel.com/docs/12.x/middleware#laravels-default-middleware-groups

補足情報(FW/ツールのバージョンなど)

バージョン

  • Laravel: v12
  • Laravel Sanctum: v4
  • React: v19

その他

  • ブラウザのコンソールに何もエラーが発生していないことを確認しました。

  • laravel.logを確認しましたが、何も記載されていません。

  • Laravelのスターターキットで自動生成されていた、認証機能周り(ミドルウェアなど)が影響しているのではないかと思っています。

  • JSONファイルにデータを保存している理由は、DB操作の実装をしたことがまだなく、一気に色々やると分かりにくくなると思ったので、一旦JSONファイルに保存するようにしています。

  • PHP、Laravelは最近触り始めたばかりであまり詳しくないので、詳細に教えていただけますとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

utm.

2025/03/08 09:46

formがsubmitされているとかはありませんか?(おそらく違いそうですが) Laravelがページをリロードするというのが根本的に無理な気がするので、API通信を1度、ローカルでなにか実行するような処理に置き換えてテストしてみてはいかがでしょうか。
shark-

2025/03/08 09:54

utmさん、コメントありがとうございます! フォーム送信時に実行している関数(handleAddTodo)の処理を全てコメントアウトするとリダイレクトなどは何も発生しないので、フロントエンド側の問題ではないのかなと思いました。 handleAddTodoの中身の処理を「console.log('test');」だけにして実行するとコンソールに「test」と表示されて、ブラウザがリロードしていないことを確認しました。
shark-

2025/03/08 10:10

サーバーを再起動したら、リダイレクトが発生しないようになりました! 初歩的な確認を忘れていてすみません! ご協力いただいた皆様、ありがとうございました!
guest

回答1

0

自己解決

サーバーを再起動したら、リダイレクトが発生しないようになりました!
初歩的な確認を忘れていてすみません!
ご協力いただいた皆様、ありがとうございました!

投稿2025/03/08 10:11

編集2025/03/08 10:12
shark-

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問