dongyou2635 2016-02-18 07:07
浏览 62
已采纳

Laravel 5.2和jQuery验证:尝试获取非对象的属性

I am using jQuery validation plugin to validate username is already existing or not.

Documentation of validation plugin says:

The serverside resource is called via jQuery.ajax (XMLHttpRequest) and gets a key/value pair corresponding to the name of the validated element and its value as a GET parameter. The serverside response must be a JSON string that must be "true" for valid elements, and can be "false", undefined, or null for invalid elements, using the default error message. If the serverside response is a string, eg. "That name is already taken, try peter123 instead", this string will be displayed as a custom error message in place of the default.

Laravel controller:

public function verifyName(Request $request)
{
    $username = $request->input('name', '');
    $user = User::where('name', $username)->first();
    if ($username == $user->name) {
        return json_encode(false);
    }else{
        return json_encode(true);
    }
}

JavaScript:

<script>
    $(function () {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $("#register").validate({
            rules: {
                name: {
                    required: true,
                    rangelength: [4, 30],
                    remote: {
                        url: "{{ url('services/validation/verify_name') }}",
                        type: "post"
                    }
                }
            },
            errorClass: "has-danger",
            validClass: "has-success",
            //success: "valid",

            highlight: function (element, errorClass) {
                $(element).fadeOut(function () {
                    $(element).fadeIn();
                });
                $(element).closest(".form-group").addClass(errorClass);
            },
            unhighlight: function (element, errorClass) {
                $(element).closest(".form-group").removeClass(errorClass);
            },
            errorPlacement: function (error, element) {
                error.insertAfter(element);
            }
        });
    });
</script>

Question:

When return false, it works but when return true, there is an error: "Trying to get property of non-object",I don't know why.

  • 写回答

1条回答 默认 最新

  • dongmo1708 2016-02-18 07:40
    关注

    If you don't have a user record with the given $username, then your $user variable is going to be null. If $user is null, when you try to access $user->name in your if statement, you'll get the "Trying to get property of non-object" error.

    You want to do something like this:

    public function verifyName(Request $request)
    {
        $username = $request->input('name', '');
        $user = User::where('name', $username)->first();
    
        // if the user was found, this will be true;
        // if the user wasn't found, $user will be null and this will be false
        if ($user) {
            return json_encode(false);
        } else {
            return json_encode(true);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站