【问题标题】:Laravel ajax output json error messagesLaravel ajax 输出 json 错误信息
【发布时间】:2015-03-29 08:07:01
【问题描述】:

您好,我正在使用 Laravel 和 jQuery Ajax 提交联系表单。这非常有效,我可以轻松地将成功消息作为字符串捕获。但是我的错误消息是作为数组传递的,所以我猜它的工作方式不同,因为没有输出错误消息。但我可以在我的控制台中看到它是这样传回的:

errors: {name: ["The name field is required."], email: ["The email field is required."],…}
email: ["The email field is required."]
message: ["The message field is required."]
name: ["The name field is required."]
success: false

我正在尝试将这些错误消息附加到我的 html 中:

error: function (XMLHttpRequest, json, errors) {
                $( "#errors" ).append(json.message );

          }

我的控制器将其传递给 ajax,如下所示:

 return Response::json(array('success' => false,
                        'errors' => $validator->getMessageBag()->toArray()

但是这没有任何效果。我错过了什么吗?我的代码如下。希望有人可以提供帮助。提前致谢。

public function getContactUsForm()
        {

            if(Request::ajax()){

                    $data = Input::all();
                    $rules = array(
                                    'name' => 'required',
                                    'email' => 'required',
                                    'message' => 'required');
                        // catch validation and pass back json reponse if not filled in correctly.
                     $validator = Validator::make ($data, $rules);
                        if ($validator -> passes()){
                            //Send email using Laravel send function
                            Mail::send('emails.contactform', $data, function($message) use ($data)
                            {
                                $message->from(Config::get('mail.from')['address'], Config::get('mail.from')['name']);
                                   $message->to('mail@gmail.com', 'Test')->subject(' Contact Form');

                            });  
                             return Response::json(array(
                                'success' => true,
                                'message' => 'Thank you, your message has been sent.'

                            )); 
                        } // end if start else
                            else
                            {
                                return Response::json(array(
                                    'success' => false,
                                    'errors' => $validator->getMessageBag()->toArray()

                                ));
                            }

                }
                else {
                    return 'NOT AN AJAX RESPONSE...';
                }

        }

我的 ajax 调用如下:

$('#submit-contact').on('submit', function(e) {

  e.preventDefault(); 

  var name = $('#name').val();
  var message = $('#message').val();
  var email = $('#email').val();

  $.ajax({
         url: '/contact_request',
         headers: {
            'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
        },
        data: {name:name, message:message, email:email},
        type: 'POST',
        success: function (json) {
          // clear inputs
            $('#name,#message,#email').val('');
            // append success message
            $( "#success" ).append(json.message );

        },
        error: function (jqXHR, json) {
            $( "#errors" ).append(json.errors );

      }
    });

});

【问题讨论】:

    标签: jquery ajax json laravel


    【解决方案1】:

    您可以遍历json.errors 对象属性以输出每个错误消息值:

    error: function (jqXHR, json) {
        for (var error in json.errors) {
            $('#errors').append(json.errors[error] + '<br>');
        }
    }
    

    【讨论】:

    • json.errors[error] 是数组而不是字符串?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2017-08-02
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多