用户名可用性使用ajax检查laravel 5

时间:2016-03-15 16:03:18

标签: ajax laravel-5

在我的视图页面上,如果我在loader.gif加载后输入用户名,但我没有得到用户名可用的结果。请给我任何想法......

这是我的控制者:

public function index()
{
      return view('test/username');
}
public function username()
{
    $username = Input::get('username');
    $users = DB::table('user')
               ->where('username',$username)
               ->first();

    if ($users !== null)
    {
        return true;
    }

        return false;

}

这些是我的路线:

Route::get('test/username', 'PageController@index');
Route::post('test/username', 'PageController@username');

这是我的Blade模板:

<html>
    <head>
        <script type="text/javascript" src="https://code.jquery.com/jquery-1.7.1.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#username").change(function () {
                    $("#message").html("<img src='../images/loader.gif' /> checking...");
                    var username=$("#username").val();
                    $.ajax({
                        type:"post",
                        url: "{{ URL::to('test/username') }}",
                        data: {username:username},
                        success: function (data) {
                            if (data == 0) {
                                $("#message").html("<img src='../images/yes.png' /> Username available");
                            } else {
                                $("#message").html("<img src='cross.png' /> Username already taken");
                            }
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <table>
            <tr>
                <td>Username</td>
                <td>:</td>
                <td>
                    <input type="text" name="username" id="username"/>
                </td>
                <td id="message"></td>
            </tr>
        </table>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先,您应该只检查确切的用户名而不是使用LIKE,或者这可以匹配类似的用户名。首先将您的函数更新为(代码中的注释):

public function username()
{
    $username = Input::get('username');
    $users = DB::table('user')
               ->where('username', $username) // exact matches only
               ->first(); // we only need one result

    // instead of count, check that a valid result is returned
    if ( $users !== null )
    {
        return true;
    }
    // else not required
    return false;
}

您需要更新路线以调用正确的功能:

Route::post('test/username', 'PageController@username');

接下来,您需要更新JavaScript以正确地将数据发送到PHP脚本。将data更新为:

data: { 'username': username },

如果仍然出现错误,则可能需要更新name()函数以实际返回JSON。您可以使用以下方式执行此操作:

return \Response::json( true );

答案 1 :(得分:0)

在您的路线中,您实际上并未调用控制器中声明的username函数,而是name函数,该函数不存在。尝试修改您的第二条路线:

Route::post('test/username', 'PageController@username');