Laravel - 在使用jQuery AJAX提交表单之前检查用户名是否已存在

时间:2015-11-09 19:43:06

标签: javascript php ajax laravel

我已经制作了一个有很多领域的注册表。因为当我提交数据并且验证器重定向重定向时有些输入为空并且用户不得不浪费时间重新填充它们,我想实现一些前端验证。 我一直在检查是否已经在提交按钮上使用了用户名,因为我不是AJAX的专家。

在AuthController中,我创建了一个函数,该函数返回一个Json,其中包含与数据库中用户名是否存在相关的响应。

class UserAuthController extends Controller
{
    public function isUserNameInUse( $username )
    {
        if (Auth::where('username', $username) != null){
            return [ 'is_used' => 1 ];
        }

            return [ 'is_used' => 0 ];
    }
}

在routes.php中有以下几行:

Route::group([ 'as' => 'api', 'prefix' => 'api', 'namespace' => 'Api'], function () {

     Route::group([ 'as' => 'auth', 'prefix' => 'auth'], function () {
          Route::any('/is_username_in_use/{username}', [
            'as' => 'isUserNameInUse',
            'uses' => 'UserAuthController@isUserNameInUse']);


    });

});

视图就像那样(只是表格的一部分):

<form action="{{ route('web.company.postSignup') }}" method="post" id="signup-form" class="form-horizontal">
            {!! csrf_field() !!}
            @include( 'errors.handler' )

                            <label for="username">
                                {{ _('Username*') }} </label>
                            <input type="text" class="form-control" name="username" id="username"
                                   value="{{ Input::old('username') }}" required>

                            <label for="password">
                                {{ _('Password*') }}
                            </label>

                            <input type="password" class="form-control" name="password" id="password"
                                   value="{{ Input::old('password') }}" onchange="form.confirmPassword.pattern = this.value;"
                                   required>

                            <label for="confirmPassword">
                                {{ _('Confirm Password*') }}
                            </label>

                            <input type="password" class="form-control" name="confirmPassword" id="confirmPassword" required>
                            <button class="btn btn-warning" id="submit-btn" type="submit">{{ _('Sign Up') }}</button>

</form> 

这是脚本,现在我只尝试记录控制器的响应,但它会打印任何内容。

$(document).ready(function () {
    $('form#signup-form').submit(function () {
         var input_username = $('input[name=username]').val();
         console.log(input_username);

        $.getJSON('/api/auth/is_username_in_use/' + input_username, function (json) {

            console.log(json);


            });
            return false;
        });

    });

2 个答案:

答案 0 :(得分:2)

您应该将return [ 'is_used' => 0 ];更改为return Response::json([ 'is_used' => 0 ]);并将use Response;添加到控制器的顶部。

答案 1 :(得分:1)

无需明确检查用户名是否正在使用中。您可以跳过此部分,而是在存储用户的数据时相应地验证它们。

这方面的一个例子可能是

public function store(Request $request)
{
    $this->validate($request, [
        'username' => 'required|unique:users',
        'password' => 'required|confirmed'
    ]);

    // process your logic
}

这样,如果验证失败,您将获得包含错误消息的json响应对象。

请注意,如果您Laravel 5,这将有效。如果您使用4.* refer to documentation作为验证部分。