ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:axios

axios で Laravel のバリデーションエラーを取得する方法

catch で取得した response.status が 422 ならバリデーションエラーになる。
その場合、response.data.errors にバリデーションエラーの文言が入っているので、ループで取り出して表示すればよい。

  1. <input type="text" name="hoge" value="{{ old('hoge', $fuga['hoge']) }}">
  2.  
  3. <!--
  4. #test_send_error にバリデーションエラーを表示
  5. d-none で最初は非表示にする
  6. -->
  7. <span id="test_send_error" class="text-danger small d-none"></span>
  8.  
  9. <button type="button" onclick="testSend()">テスト送信</button>
  10.  
  11. <script>
  12. async function testSend() {
  13. if (!confirm("テスト送信しますか?")) {
  14. return
  15. }
  16.  
  17. // 既にエラーが表示済みの場合は非表示にする
  18. $('#test_send_error').addClass('d-none')
  19.  
  20. let formData = new FormData()
  21. formData.append('hoge', $('input[name=hoge]').val())
  22.  
  23. // 10秒でタイムアウト
  24. await axios.post('/api/test', formData, {timeout: 10000})
  25. .then(res => {
  26. // 成功した場合の処理
  27. })
  28. .catch(e => {
  29. // 10秒を超えてタイムアウトした際の処理
  30. if (e.response == null) {
  31. alert('接続がタイムアウトしました。\n入力が正しいかご確認ください。')
  32. return
  33. }
  34.  
  35. // バリデーションエラーの処理
  36. if (e.response.status == 422) {
  37. let errors = e.response.data.errors
  38. let mes = ''
  39. $.each(errors, function(key, val) {
  40. mes += '<i class="fas fa-exclamation-circle mr-2"></i>' + val + '<br>'
  41. })
  42. $('#test_send_error').html(mes)
  43. $('#test_send_error').removeClass('d-none')
  44.  
  45. // それ以外のエラー処理
  46. } else {
  47. let mes = e.response.status + ' エラー\n'
  48. mes += statusText
  49. alert(mes)
  50. }
  51. })
  52. }
  53. </script>

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/axios.txt · 最終更新: 2020/03/11 16:21 by humolife