Laravel ajax表单422 Unprocessable Entity

时间:2016-10-06 15:33:55

标签: php jquery ajax laravel-5

我正在尝试从使用Laravel 5.2制作的网站验证并提交表单 问题来了,当我尝试提交表单而不填写所有必填字段。 StoreRequest检查所需的字段并返回错误:

{"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;
    });

1 个答案:

答案 0 :(得分:0)

422是一个无法处理的实体,是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");
        }
    });
});