jQuery Ajax: неперехваченная ошибка типа: не удается прочитать свойство ‘name’ неопределенного

#jquery #ajax #laravel-5

#jquery #ajax #laravel-5

Вопрос:

Прежде всего, я знаю, что несколько человек столкнулись с ошибкой с подобным сообщением об ошибке, и я просмотрел многие из них, но не нашел ни одного, который мог бы решить мою собственную проблему.

Используя инструменты разработчика, я мог видеть возвращаемые сообщения об ошибках. Два сообщения:

Не удалось загрузить ресурс: сервер ответил со статусом 500 (внутренняя ошибка сервера)

и

Неперехваченная ошибка типа: не удается прочитать свойство ‘name’ неопределенного

Я отправляю данные учащегося из этой формы:

   <form  method="post" id="school_registration_form">
      <input type="hidden" name="_token" value="{{ csrf_token() }}">

      <input type="text" id="name" name="name">
      <div id="name_error"></div>

      <input type="email" id="school_email" name="school_email">
      <div id="school_email_error"></div>

      <input type="email" id="your_email" name="your_email">
      <div id="your_email_error"></div>

      <input type="text" id="phone" name="phone" >
      <div id="phone_error"></div>

      <input type="password" id="password" name="password">
      <div id="password_error"></div>

      <input type="password" id="password_confirmation" name="password_confirmation" >
      <div id="password_confirmation_error"></div>

      <div class="col-sm-offset-3 col-sm-10">
      <button type="submit" class="btn btn-success">Create Account</button>
  </div>
  

через этот маршрут:

 Route::post('store', ['as' => 'school/store', 'uses' => 'SchoolController@store']);
  

для этой функции:

 public function store(SchoolCreateUserRequest $request){

 $user = User::create([
    'name' => $request->input('name'),
    'inst_email' => $request->input('school_email'),
    'alt_email' => $request->input('your_email'),
    'phone' => $request->input('phone'),
    'password' => bcrypt($request->input('password')),
  ]);

  Auth::login($user);
}
  

Вот правила проверки для запроса формы:

 public function rules(){
return [
    'name' => 'required|unique:users|min:8',
    'school_email' => 'required|email',
    'your_email' => 'required|email|unique:users',
    'phone' => 'required',
    'password' => 'required|confirmed|min:4',
    'password_confirmation' => 'required'
];
  

}

и, наконец, самая важная часть. Вот код jQuery / Ajax, который отправляет значения на сервер:

 $(function(){

    $.ajaxSetup({
      headers: {
        'X-CSRF-Token': $('meta[name="_token"]').attr('content')
      }
    });

    // when form submit button is clicked
    $('#ub_registration_form').submit(function (e) {
      e.preventDefault();

      var name = $('#name').val();
      var school_email = $('#school_email').val();
      var your_email = $('#your_email').val();
      var phone = $('#phone').val();
      var password = $('#password').val();
      var password_confirmation = $('#password_confirmation').val();
      var token = $("input[name=token]").val();
      var route = "school/store";


      $.ajax({
        url: route,
        type: 'post',
        datatype: 'json',
        data: {
          'name'  : name,
          'school_email' : school_email,
          'your_email'  : your_email,
          'phone'      : phone,
          'password'   : password,
          'password_confirmation'  : password_confirmation,
          '_token': $('meta[name="_token"]').attr('content')
        },
        success: function(msg){
          notify('Your account was successfully created.', 'success', "ub");
          logged_in_user();
        },
        error: function(data){
          var name = data.responseJSON.name;
          var school_email = data.responseJSON.school_email;
          var your_email = data.responseJSON.your_email;
          var phone = data.responseJSON.phone;
          var password = data.responseJSON.password;
          var password_confirmation = data.responseJSON.password_confirmation;

          $('#name_error').html(data.responseJSON.name);
          if (name != null amp;amp; name != "") {
            $('#name').css("border", "1px solid red");
          }

          $('#school_email_error').html(data.responseJSON.school_email);
          if (school_email != null amp;amp; school_email != "") {
            $('#school_email').css("border", "1px solid red");
          }


          $('#your_email_error').html(data.responseJSON.your_email);
          if (your_email != null amp;amp; your_email != "") {
            $('#your_email').css("border", "1px solid red");
          }


          $('#phone_error').html(data.responseJSON.phone);
          if (phone != null amp;amp; phone != "") {
            $('#phone').css("border", "1px solid red");
          }

          $('#password_error').html(data.responseJSON.password);
          if (password != null amp;amp; password != "") {
            $('#password').css("border", "1px solid red");
          }

          $('#password_confirmation_error').html(data.responseJSON.password_confirmation);
          if (password_confirmation != null amp;amp; password_confirmation != "") {
            $('#password_confirmation').css("border", "1px solid red");
          }
        }

      });       


    });

  });
  

Извините за длинный код. Пытался уменьшить его настолько, насколько мог.
Спасибо за любую помощь.

Комментарии:

1. Uncaught TypeError: Cannot read property 'name' of undefined . Где произошла эта ошибка? Пожалуйста, укажите это в коде с комментарием.

2. Сначала отладьте его достаточно, чтобы исправить: Failed to load resource: the server responded with a status of 500 (Internal Server Error)

3. Привет @Kinkshuk, это произошло здесь: http://localhost:8000/school/store . url выглядит правильно.

4. можете ли вы проверить свои параметры, если они имеют правильные значения, var data = { «name» : name, «school_email» : your_email, «phone» : телефон, «password»: пароль, «password_confirmation» : password_confirmation, «_token»: $(‘meta[name=»_token»]’).attr(‘content’) }; console.log(данные);