2015-01-29 5 views
1

Привет Я использую Laravel и jQuery Ajax для отправки контактной формы. Это работает отлично, и я могу легко поймать сообщение об успехе, как его строку. Но мое сообщение об ошибке передается как массив, поэтому я думаю, что он работает по-другому, поскольку сообщения об ошибках не выводятся. Но я могу видеть в моей консоли, что он был принят обратно в виде так:Laravel ajax output json сообщения об ошибках

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('[email protected]', '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...'; 
       } 

     } 

и мой Аякса вызов ниже:

$('#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); 

     } 
    }); 

});

ответ

2

Вы можете перебрать свойства json.errors объекта для вывода каждого значения сообщения об ошибке:

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

'' 'json.errors [ошибка]' '' представляет собой массив вместо строки? – JCarlos

Смежные вопросы