簡體   English   中英

Laravel ajax表單422 Unprocessable Entity

[英]Laravel ajax form 422 Unprocessable Entity

我正在嘗試驗證並提交一個使用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;
    });

422是一個不可處理的實體,是Laravel的請求驗證,告訴你缺少某些東西。

您的ajax請求僅發送CSRF令牌,響應告訴您:名稱,主題和內容是必填字段。

將它添加到HTML中的表單{!! csrf_field() !!} {!! 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");
        }
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM