Laravelからajaxで非同期通信した際にInternal Server Error 500が出た時の問題箇所探し
Laravelで制作したブログサイトで、記事へのいいねボタンを独自に設けるという案件がありました。その際、いいねボタンを押した時にページがリロードされるのは野暮ったいので、画面遷移させずにjQueryのajaxを使って非同期通信でいいね数を1増やすということを行いました。
しかし、どうもうまく動かず、Internal Server Error 500というのが出てしまいます。
この500番のエラーというのは、サーバーとの通信処理中のどこかでエラーが出ていることを示しています。
ajax通信の場合の書き方として、処理がうまくいった場合にはdone、失敗した場合にはfailという記述分けをするパターンが多いかと思いますが、Internal Server Error 500 が出ている場合は、処理失敗なのでfailの方に処理が進行されることと思います。
そうなると、POST通信をさせているPHP側の記述内に問題があるわけですが、ajax通信でアクセスしているためにPHP側のエラー文言などが見えず問題箇所が特定できず、私はここで何時間も悩みましたね。
結論
PHPの問題箇所の特定のために、一度ajaxでの非同期処理はやめて、同期処理つまりformタグを使いPOST通信で処理するかたちを書いて動作確認をしましょう。そうすると、Laravelの素敵なデバッグ機能が働きPHP側のエラー箇所が特定できるかもしれません。私はそれでエラー箇所を特定し修正したのちに、再度ajaxでの非同期通信に記述をし直したらようやく問題が解決しました
ajaxなどの非同期通信でエラーが出た場合は、通常の同期通信(formを使ったpost通信など)で試して問題箇所を探る
ということですね。
当たり前っちゃ当たり前なんですけどね。
最終的にはこちらの記事の最後の一文に救われました、ありがとうございます。
▼LaravelのAjax通信エラー 500 (Internal Server Error)
https://qiita.com/dam-san/items/36bcd031f461b09f42cf