Сообщение формы Laravel Ajax показывает внутреннюю ошибку сервера 500. Я пытался решить с большим количеством решений, но все еще не работал

Я хочу опубликовать данные с запросом ajax, но он сказал, что внутренний сервер. Я пытался добавить метаданные и X-CSRF-TOKEN, но все равно не работал. Пожалуйста, взгляните на мой код

Аякс код:

$("#firstForm").on("submit", (e)=>{
    e.preventDefault()
    let dataString = $(this).serialize();
    let email = document.getElementById("emailInput").value
    let password = document.getElementById("passwordInput").value
    var token = $('meta[name = "csrf-token"]').attr('content');
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': token
        }
    });
    $.ajax({
        type: 'POST',
        url: '/register/create',
        data: dataString,
        dataType: 'json',
    }).done(function(response){
        console.info("Done");
    });
    return false;
    })

HTML-форма:

<form class = "mt-5 text-start" id = "firstForm" method = "post">
                    <label class = "text-white main-font">Email</label>
                    <input type = "email" name = "email" id = "emailInput" class = "form-control mb-2" placeholder = "Enter your email here">
                    <label class = "text-white main-font">Password</label>
                    <input type = "password" name = "password" id = "passwordInput" class = "form-control password mb-2" placeholder = "Enter your password here">
                    <i class = "d-none fa-solid fa-eye fs-5 eye" onclick = "eyeOpen()"></i>
                    <i class = "fa-solid fa-eye-slash fs-5 eye" onclick = "eyeClose()"></i>
                    <div class = "form-check text-start mb-5">
                        <input class = "form-check-input" type = "checkbox" value = "" id = "flexCheckDefault">
                        <label class = "form-check-label text-white" for = "flexCheckDefault">
                            I've agree to the terms and conditions!
                        </label>
                    </div>
                    <button id = "firstBtn" class = "mb-3 mt-5 btn btn-lg btn-danger text-white main-font w-100">Next</button>
                </form>

Маршрут Ларавела:

Route::post('register/create', [AccountController::class, 'create']);

Контроллер Laravel:

public function create(Request $request) {
    $user = new User;
    $user->email = $request->email;
    $user->password = Hash::make($request->password);
    $user->save();

    return view('accounts.login');
}

Ошибка:

[2022-11-22 13:18:23] local.ERROR: SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (SQL: insert into `users` (`email`, `password`, `updated_at`, `created_at`) values (?, $2y$10$uwsmx9lDw4z9a0tGwUjBWeNM8zfNEkoa7oREGdCBgxTkF3Owlo5Uy, 2022-11-22 13:18:23, 2022-11-22 13:18:23)) {"exception":"[object] (Illuminate\\Database\\QueryException(code: HY000): SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (SQL: insert into `users` (`email`, `password`, `updated_at`, `created_at`) values (?, $2y$10$uwsmx9lDw4z9a0tGwUjBWeNM8zfNEkoa7oREGdCBgxTkF3Owlo5Uy, 2022-11-22 13:18:23, 2022-11-22 13:18:23)) at C:\\xampp\\htdocs\\dating\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:712)

Ошибка 500 — это общее сообщение об ошибке, которое охватывает почти все, что может пойти не так с PHP-скриптом. Проверьте журналы ошибок вашего сервера, чтобы узнать точное сообщение об ошибке. Для Laravel также проверьте журналы в storage/logs/

aynber 22.11.2022 14:04

Я нашел логи, но что мне с ними делать?

Thant Htet Aung 22.11.2022 14:07

Читай их? Найдите информацию, что вызвало ошибку...?

CBroe 22.11.2022 14:08

Там вроде более 2к строк. Как читать и что искать?

Thant Htet Aung 22.11.2022 14:09

Ошибка обычно ближе к концу. Если есть трассировка стека (с номерами в начале строк), то посмотрите, где находится #0. Если это журнал Laravel, посмотрите на последнюю строку с отметкой времени.

aynber 22.11.2022 14:10

Вы можете прийти поболтать? я не могу отправить сюда ошибку

Thant Htet Aung 22.11.2022 14:15

Вы можете отредактировать свой пост и добавить туда ошибку

aynber 22.11.2022 14:16

Я изменил. Взгляни, пожалуйста

Thant Htet Aung 22.11.2022 14:18
Field 'name' doesn't have a default value - Либо передайте что-нибудь вместо имени, либо сделайте поле в таблице пользователей обнуляемым.
aynber 22.11.2022 14:20

Я попытался снова добавить nullable, mirgate и новую базу данных, а также отправить данные имени, но на этот раз он показывает «Нарушение ограничения целостности: 1048 Столбец« электронная почта »не может быть нулевым».... Я проверил запрос сообщения об ошибке и обнаружил, что данные электронной почты и пароля являются нулевыми. Но я не могу найти ошибку в моем коде для этого

Thant Htet Aung 22.11.2022 14:31

Похоже, что форма не дает никаких данных. У меня есть console.info данные, но все они не определены

Thant Htet Aung 22.11.2022 14:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
11
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

попробуйте добавить заполненную форму для имени и отправить ее через ajax. так

<form class = "mt-5 text-start" id = "firstForm" method = "post">
@csrf
                    <label class = "text-white main-font">Name</label>
                    <input type = "text" name = "name" id = "name" class = "form-control mb-2" placeholder = "Enter your Name here">

                    <label class = "text-white main-font">Email</label>
                    <input type = "email" name = "email" id = "emailInput" class = "form-control mb-2" placeholder = "Enter your email here">
                    <label class = "text-white main-font">Password</label>
                    <input type = "password" name = "password" id = "passwordInput" class = "form-control password mb-2" placeholder = "Enter your password here">
                    <i class = "d-none fa-solid fa-eye fs-5 eye" onclick = "eyeOpen()"></i>
                    <i class = "fa-solid fa-eye-slash fs-5 eye" onclick = "eyeClose()"></i>
                    <div class = "form-check text-start mb-5">
                        <input class = "form-check-input" type = "checkbox" value = "" id = "flexCheckDefault">
                        <label class = "form-check-label text-white" for = "flexCheckDefault">
                            I've agree to the terms and conditions!
                        </label>
                    </div>
                    <button id = "firstBtn" class = "mb-3 mt-5 btn btn-lg btn-danger text-white main-font w-100">Next</button>
                </form>

а также измените свой контроллер следующим образом

public function create(Request $request) {
    $user = new User;
    $user->name= $request->name;
    $user->email = $request->email;
    $user->password = Hash::make($request->password);
    $user->save();

    return view('accounts.login');
}

измените свой ajax следующим образом

                let dataString = $(this).serialize();
                $.ajax({
                    type: "post",
                    url: '/register/create',
                    data: dataString, // serializes the form's elements.
                    success: function(data) {
                        console.info(data);
                    },
                    error: function(data) {
                        console.info(data['message']);
                    },
                });

Я пробовал это. Теперь форма не дает никаких данных, даже если я ввожу данные. Но данные можно вывести с помощью getElementById().value. Я сериализую данные формы с помощью jquery и отправляю их как данные. Я думаю, что это главная проблема сейчас. Как мне это исправить? Должен ли я избавиться от сериализации?

Thant Htet Aung 22.11.2022 14:49

Я обновил свой ответ, проверьте форму и ajax

Mohammad Edris Raufi 22.11.2022 15:11

Когда я использовал ваш ответ, он сказал, что метод 405 не разрешен. Я видел, что у ajax есть метод удаления. Моя первоначальная форма предназначена для публикации данных. Итак, я изменил его на пост. Затем он сказал 419 неизвестную ошибку статуса, которая может быть связана с отсутствием X-CSRF-TOKEN. Итак, я добавил это тоже. Затем он сказал, что 500 внутренняя ошибка сервера, и предупреждение, которое вы сделали, сказало, что не определено, что является текущей проблемой.

Thant Htet Aung 22.11.2022 15:16

Я добавил X-CSRF-TOKEN в виде @csrf. после удаления оповещения какую ошибку выдает? а также, пожалуйста, удалите заголовки из ajax, я обновил свой ajax, вы можете проверить новое обновление

Mohammad Edris Raufi 22.11.2022 15:27

Это наконец решено сейчас. Я специально закодировал функцию сериализации, чтобы получить шкафную строку данных в качестве возврата функции сериализации Jquery. Спасибо за ваш ответ в любом случае

Thant Htet Aung 22.11.2022 15:30

Рад был помочь. если вам нравится ответ, голосование будет оценено

Mohammad Edris Raufi 22.11.2022 15:32
Ответ принят как подходящий

Я проверил сообщения об ошибках файла laravel.log. Обнаружено, что сериализация Jquery возвращает пустую строку. Итак, я специально закодировал функцию сериализации, чтобы получить строку данных шкафа как Jquery.

let dataString = "email = " + document.getElementById("emailInput").value + "&password = " + document.getElementById("passwordInput").value

Другие вопросы по теме