お世話になります。
Laravel5でのAjaxでPOSTするときのValidationの挙動についておしえてください。
Ajaxで値をPOSTすることはすでに可能になっているのですが、適切なバリデーションエラーのメッセージが返ってこない状態です。
特に特別なことは何もやっていないので、非常にシンプルなものになります。
バリデーションを正常に通過した際にはStatus200で返り値が正常に返ってきますが、バリデーションに引っかかった際にStatus422の場合に設定したバリデーションメッセージがjsonで返ってきません。(HTMLのソースは今回省略しています。それぞれのname属性の値がdata:以下に格納されています)
Ajax内のcatchでの返り値の拾い方が悪いのか、laravel側でのレスポンスの返し方が悪いのかイマイチわかっておりません。
知見ある方のアドバイスいただきたいと考えています。よろしくお願いします。
JS(vue
1const endpoint_url = '/v2/fe_test/store'; 2new Vue({ 3 el: '#ln_form', 4 data: { 5 ln_email: '', 6 ln_password: '', 7 ln_textarea: '', 8 }, 9 methods: { 10 ln_submit: function() { 11 let re = axios.post( 12 endpoint_url, 13 { 14 email: this.ln_email, 15 password: this.ln_password, 16 }, 17 { 18 headers: { 19 'ContentType': 'application/json', 20 'X-Requested-With': 'XMLHttpRequest', 21 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 22 } 23 }).then( 24 response => { 25 console.log(response.status); 26 console.log(response.statusText); 27 console.log(response.data); 28 }).catch(function(){ 29 console.log(response.status); 30 console.log(response.statusText); 31 console.log(response.data); 32 }); 33 } 34 } 35});
PHP
1public function store(Request $request) 2{ 3 4 $info = [ 5 'email' => $request->input('email'), 6 'password' => $request->input('password'), 7 ]; 8 $request->validate([ 9 'email' => 'required|email', 10 'password' => 'required|min:4', 11 ]); 12 13 return response()->json($info); 14}
おそらく422の場合もフォームバリデーション関連で自動的にリダイレクトがかかっているのでしょうか。
https://qiita.com/junsan50/items/ec7f810decd3b82d3d76
jQueryでのAjaxではtypeをjsonにすることでレスポンスのエラーメッセージを取得できましたが、Vueでやると422のステータスは返ってきますが肝心のエラーメッセージがjsonで取得できないといったところです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。