2016-10-06 41 views
3

Laravel 5.2 で作成したサイトからフォームを検証して送信しようとしています。必要なフィールドをすべて入力せずにフォームを送信しようとすると問題が発生します。ここでLaravel ajaxフォーム422 Unprocessable Entity

{"name":["The name field is required."],"email":["The email field is required."],"subject":["The subject field is required."],"content":["The content field is required."]} 

は私がフォームを送信する方法と私は検証のエラーを表示する方法である:

$("#contact_form").submit(function() { 
     $.post("{{ url('contact/store/')}}", {"_token": "{{ csrf_token() }}" }, 
     function(data) { 
      if(data) { 
       var items = []; 
       $.each(data, function(key, val) { 
        items.push("<li id='" + key + "'>" + val + "</li>"); 
       }); 

       $("<ul/>", { 
        "class": "my-new-list", 
        html: items.join("") 
       }).appendTo("#errors"); 
      } 
     }); 
     return false; 
    }); 
+0

そして、何が問題でしょうか? –

+0

フォームを送信すると、422 Unprocessable Entityが表示され、ユーザーにエラーメッセージを表示できません。 –

+0

フォームデータは送信せず、トークンだけを送信しています。そして 'val'は配列です。 –

答えて

0

422は、あるフィールドが必要と私はそのようなエラーが返されStoreRequestチェック処理不能なエンティティは、Laravelのリクエスト検証で、何かが見つからないことを伝えます。

あなたのajaxリクエストはCSRFトークンを送信するだけで、名前、件名、内容は必須フィールドです。

まだ追加していない場合は、フォームにこれをHTML {!! csrf_field() !!}で追加してください。あなたの行動をフォームに入れる方がはるかに効果的です。フォームを静的に使うことができます。また、Bladeをjavascriptの中に入れる必要もありません。

フォーム例:

<form id="contact_form" action="{{ url('contact/store') }}" method="post"> 

    <!-- Form stuff --> 

    {!! csrf_field() !!} 
</form> 

JS例:

$("#contact_form").submit(function() { 
    $.post(
     $(this).attr('action'), 
     $(this).serializeArray(), 
     function(data) { 
     if(data) { 
      var items = []; 
      $.each(data, function(key, val) { 
       items.push("<li id='" + key + "'>" + val + "</li>"); 
      }); 

      $("<ul/>", { 
       "class": "my-new-list", 
       html: items.join("") 
      }).appendTo("#errors"); 
     } 
    }); 
}); 
関連する問題