Javascript 500(内部服务器错误)-用户注册系统-Laravel
所以,基本上我尝试在Laravel中创建一个用户注册系统。注册表验证工作正常,但验证通过后,我无法插入数据。相反,我犯了这个错误。任何帮助都将不胜感激。谢谢 我尝试使用查询生成器插入数据。不幸的是,它仍然不起作用 register-script.jsJavascript 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”)。单击(
$.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)