Javascript 500(内部服务器错误)-用户注册系统-Laravel

Javascript 500(内部服务器错误)-用户注册系统-Laravel,javascript,php,jquery,ajax,laravel,Javascript,Php,Jquery,Ajax,Laravel,所以,基本上我尝试在Laravel中创建一个用户注册系统。注册表验证工作正常,但验证通过后,我无法插入数据。相反,我犯了这个错误。任何帮助都将不胜感激。谢谢 我尝试使用查询生成器插入数据。不幸的是,它仍然不起作用 register-script.js $.ajaxSetup({ 标题:{ 'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content')) } }); $(文档).ready(函数(){ $(“#btnRegister”)。单击(

所以,基本上我尝试在Laravel中创建一个用户注册系统。注册表验证工作正常,但验证通过后,我无法插入数据。相反,我犯了这个错误。任何帮助都将不胜感激。谢谢

我尝试使用查询生成器插入数据。不幸的是,它仍然不起作用

register-script.js

$.ajaxSetup({
标题:{
'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content'))
}
});
$(文档).ready(函数(){
$(“#btnRegister”)。单击(函数(e){
e、 预防默认值();
$.ajax({
url:“/validate register”,
类型:“post”,
数据:{
电子邮件:$('#示例InputEmail1').val(),
用户名:$('#示例InputUsername1').val(),
密码:$('#示例InputPassword1').val(),
确认密码:$('#示例InputConfPassword1').val()
},
错误:函数(数据){
var errMsg=“”;
var response=JSON.parse(data.responseText);
Object.key(response.errors).forEach(函数(k){
errMsg+='
  • '+响应。错误[k]+'
  • ' }) ; $('body').css({'overflow':'visible'}); $('.alert').css({'display':'block'}); $('.alert danger').html(errMsg); }, 成功:功能(数据){ window.location.href='/'; } }); }); });
    register-controller.php


    我没有尝试,但我认为当您使用
    $request->validate([rules…])
    时,它不会返回validator对象,而是返回已验证为数组的字段

    因此,控制器方法应为:

    public function ValidateRegister(请求$req)
    {
    $validatedData=$req->validate([
    “电子邮件”=>“必需”|电子邮件”,
    “用户名”=>“必需”,
    “密码”=>“必需”|最小值:6',
    “confirmPassword”=>“必需|相同:密码”
    ]);
    返回$this->insertNewUser(
    $validatedData['email'],
    $validatedData['username'],
    Hash::make($validatedData['password']))
    );
    }
    

    validate方法本身通过将错误作为响应返回来处理失败的验证

    它在您的Laravel日志中说了什么?我想这会给你一个更具体的错误来处理500个响应。@matticustard在日志中没有任何具体的内容。那么在浏览器的开发人员工具中检查网络响应呢?如果注释掉数据库插入,它会返回success吗?我确实看到了一个问题,但它不应该创建500错误。你需要
    返回
    insertNewUser
    否则你将永远看不到预期的JSON响应。这不是一个500,而是一个javascript失败,至少他发布了什么。不管怎样,我在返回
    insertNewUser
    函数时漏掉了$this关键字。
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    
    $(document).ready(function () {
        $('#btnRegister').click(function (e) {
            e.preventDefault();
            $.ajax({
                url: "/validate-register",
                type: "post",
                data: {
                    email: $('#exampleInputEmail1').val(),
                    username: $('#exampleInputUsername1').val(),
                    password: $('#exampleInputPassword1').val(),
                    confirmPassword: $('#exampleInputConfPassword1').val()
                },
                error: function (data) {
                    var errMsg = "";
                    var response = JSON.parse(data.responseText);
                    Object.keys(response.errors).forEach(function(k){
                        errMsg += '<li>' + response.errors[k] + '</li>'
                    }) ;
                    $('body').css({'overflow': 'visible'});
                    $('.alert').css({'display': 'block'});
                    $('.alert-danger').html(errMsg);
                },
                success:function(data){
                    window.location.href = '/';
                }
            });
        });
    });
    
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Input;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\DB;
    use App\UserModel;
    
    class RegisterController extends Controller
    {
        public function Index(){
            return view('register');
        }
    
        public function ValidateRegister(Request $req){
    
            $validatedData = $req->validate([
                'email' => 'required|email',
                'username' => 'required',
                'password' => 'required|min:6',
                'confirmPassword' => 'required|same:password'
            ]);   
            if(!$validatedData->fails())
                insertNewUser($validatedData['email'],$validatedData['username'],Hash::make($validatedData['password']));
        }
    
        public function insertNewUser($email, $username, $password){        
            DB::table('users')->insert([
                'email' => $email,
                'username' => $username,
                'password' => $password
            ]);
    
            return response()->json(['response' => 'success']);
        }
    }
    
    POST http://127.0.0.1:8000/validate-register 500 (Internal Server Error)
    
    Uncaught TypeError: Cannot convert undefined or null to object
        at Function.keys (<anonymous>)
        at Object.error (register-script.js:22)
        at u (app.js:1)
        at Object.fireWith [as rejectWith] (app.js:1)
        at C (app.js:1)
        at XMLHttpRequest.<anonymous> (app.js:1)