首页 > 解决方案 > Laravel ajax 用户注册页面不起作用

问题描述

我正在尝试使用 Laravel 使用 jQuery 提交我的表单来创建我的注册页面,但它不起作用。它没有返回任何东西,我不知道做错了什么。

这是我的代码:

网页.php

// Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register')->name('postRegister'); 

注册控制器.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Auth\Events\Registered;

class RegisterController extends Controller{

    use RegistersUsers;

    protected $redirectTo = '/home';

    public function __construct(){
        $this->middleware('guest');
    }

    protected function validator(array $data)
    {
         $vaild =   Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);

        if($vaild->fails()){
            return json_encode($vaild->errors());
        }

        return true;

    }

    public function register(Request $request)
    {
        $v = $this->validator($request->all());

        if(!is_bool($v)){
            return $v;
        }

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
            ?: redirect($this->redirectPath());
    }

    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

    protected function registered(Request $request, $user)
    {
        return "true";
    }


}

创建客户.php

<form action="{{ route('postRegister') }}" method="POST" id="registerForm">
                                @csrf
                                <fieldset >
                                    <div class="col-md-8"> 
                                        <div class="form-group">
                                            <label >Full Name:</label>
                                            <input type="text" name="name" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <label >Phone Number:</label>
                                            <input type="text" name="phoneNumber" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <label >E-mail:</label>
                                            <input type="text" name="email" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <label >Address</label>
                                            <input type="text" name="address" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <label >Password</label>
                                            <input type="password" name="password" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <label >Repeat Password</label>
                                            <input type="password" name="password_confirmation" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <img src="{{ asset('images/load.gif') }}" style="display:none;" id="registerImg" />
                                            <h6 class="mb-3 text-danger" id="registerShow"></h6>
                                            <button type="Submit" id="registerSubmit" class="theme_btn" onclick="submit_form('registerForm', 'registerSubmit', 'registerImg', 'registerShow', 'yes')" >Create Customer</button>
                                        </div>
                                    </div>
                                </fieldset>
                            </form>

提交.js

function submit_form(formid, btn_id, img_id, show_id, reload){
    var frm = $('#'+formid);
    frm.submit(function(e){
        e.preventDefault();
        $("#"+btn_id).hide();
        $("#"+img_id).show();
        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            data:  new FormData(this),
            dataType:'JSON',
            headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
            contentType: false,
            processData:false,
            success: function (data){ 
                console.log(data)
                $("#"+btn_id).show();
                $("#"+img_id).hide();
                if(data.errors){   
                    $("#"+show_id).html(''); 
                    $.each(data.errors, function(key, value){
                        $("#"+show_id).append('<p class="text-danger">'+value+'</p>');
                    });                                   
                } else{
                    $("#"+show_id).addClass('text-success').fadeIn().html(data.success); 
                    if(reload == 'yes'){
                        setTimeout(function(){
                            location.reload();
                        } , 2000);
                    }
                    else{
                        frm[0].reset();    
                        setTimeout(function(){
                            $("#"+show_id).fadeOut('slow').html(data.success);
                        } , 10000);
                    } 
                }
                $("#"+btn_id).show();             

            },
            error: function(data){       
                console.log(data)
                $("#"+btn_id).show();
                $("#"+img_id).hide();
            },
        });
    });
}

我在网上搜索,但没有找到任何有用的东西。

我怎样才能使这个表格工作?

标签: phplaravellaravel-5

解决方案


发布数据时可能缺少 csrf 令牌字段。您在设置数据值后设置标题,将其移动到数据值之前

 { headers: { 'csrftoken' : '{{ csrf_token() }}' },

推荐阅读