使用 laravel 进行 ajax 验证后的新用户

Posted

技术标签:

【中文标题】使用 laravel 进行 ajax 验证后的新用户【英文标题】:new user after ajax validation with laravel 【发布时间】:2016-10-15 22:53:50 【问题描述】:

我想在验证用 ajax 发送的数据后做一个记录。这个想法是在没有错误的情况下运行函数 CreateNewUser,但不将数据存储在数据库中。会这样吗?

谢谢。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Validator;
use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Modals\NewUser;

class UserController extends Controller

    public function index()
    
        return view('home');
    
    public function NewUser(Request $request)
    
        $validator= Validator::make($request->all(),[

            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:8|same:cpassword',
            'cpassword'=> 'required',

        ]);

        if($validator->fails())
            return response()->json([
                'success' => false,
                'error' => $validator->errors()->toArray()
            ]);


        else
            return response()->json(['success' => true ]);

            $this->CreateNewUser($request);
        

    

    private function CreateNewUser(Request $requestt)

        $user = new NewUser;
        $user->name = $requestt->name;
        $user->email = $requestt->email;
        $user->passwosrd = $requestt->password;
        $user->rememberToken = $requestt->_token;
        $user->save();
    



型号:

<?php

namespace App\Modals;

use Illuminate\Database\Eloquent\Model;

class NewUser extends Model

    protected $table = 'users';

js:

function send(event)

    event.preventDefault();

    $.ajax(


        type: 'post',
        url: userAjax,
        dataType: 'json',
        data: 
            name: $('#name').val(),
            email: $('#correo').val(),
            password: $('#password').val(),
            cpassword: $('#cpassword').val(),
            _token: $('#new-user').attr('data-token')
        ,
        beforeSend: function()
        
            $("#nameError").fadeOut();
            $("#emailError").fadeOut();
            $("#passwordError").fadeOut();
            $("#cpasswordError").fadeOut();

        ,

        success: function(data)



           if(!data.success)
               console.log(data);
               if(typeof data.error.name !== 'undefined')

                   $('#name').css('border-color', 'red');
                   $('#nameError').fadeIn(10, function () 
                       $("#nameError").html(data.error.name);

                   )
               
               if(typeof data.error.email !== 'undefined')
                   $('#correo').css('border-color', 'red');
                   $('#emailError').fadeIn(10, function () 
                       $("#emailError").html(data.error.email);

                   )
               
               if(typeof data.error.password !== 'undefined')
                   $('#password').css('border-color', 'red');
                   $('#passwordError').fadeIn(10, function () 
                       $("#passwordError").html(data.error.password[0]);


                   )
               
               if(typeof data.error.cpassword !== 'undefined')
                   $('#cpassword').css('border-color', 'red');
                   $('#cpasswordError').fadeIn(10, function () 
                       $("#cpasswordError").html(data.error.cpassword);


                   )
               


            else
               console.log(data);
               $('#Register').modal('hide');
               $("#header").replaceWith($('#header'));
            

        ,
        error: function() 

    );


错误:

console.log(data):

jquery.min.js:4 
POST http://localhost:8000/NewUser 500 (Internal Server Error)
send @ jquery.min.js:4
ajax @ jquery.min.js:4
send @ scripts.js:5on
click @ (index):158

【问题讨论】:

【参考方案1】:

函数 CreateNewUser 永远不会被调用,因为您在打破范围的函数调用之前返回,并且永远不会调用 $this-&gt;CreateNewUser($request);

public function NewUser(Request $request)
    
        $validator= Validator::make($request->all(),[

            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:8|same:cpassword',
            'cpassword'=> 'required',

        ]);

        if($validator->fails())
            return response()->json([
                'success' => false,
                'error' => $validator->errors()->toArray()
            ]);


        else
            return response()->json(['success' => true ]);

            $this->CreateNewUser($request);
        

    

为了让它工作,将 else 代码更改为

else 
      $this->CreateNewUser($request);
  

【讨论】:

您好,我更改了代码并保持不变。 你现在收到这个错误了吗POST http://localhost:8000/NewUser 500 (Internal Server Error) 或多或少,我遇到了这个问题,并且令牌的名称也记住在数据库中 很高兴为您提供帮助!

以上是关于使用 laravel 进行 ajax 验证后的新用户的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 自定义验证和 ajax

Laravel 和 Datatables:Ajax 数据不使用来自 html 选择的新 ajax 参数刷新表

使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯

Laravel 请求在验证失败时不返回修改后的请求

Laravel AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419

Laravel 6 - 显示验证消息的新方法