繁体   English   中英

POST 500(内部服务器错误)-Laravel和Ajax

[英]POST 500 (Internal Server Error) - Laravel and Ajax

我想将带有ajax的发布请求发送到laravel中的控制器。 Ajax请求发送两个input参数,我希望控制器使用第一个参数查找数据库中的列,然后使用第二个输入参数设置name属性。 但是我有此错误消息Creating default object from empty value

Ajax function:

$('#saveUserProfile').on('click', function () {

                var $finduser = $('input[name=findUser]').val();  
                var $name = $('input[name=userprofilename]').val();


                    $.ajax({
                        type:"POST",
                        url:'/code/task1/public/updateUser',
                        data: {
                             'name' : $name,
                             'finduser' : $finduser,
                            // 'email' : $email,
                         },
                        success:function(data){

                            $("#input1").val(data[0].name);

                        }

                    });
         }); 

和我控制器中的功能

public function updateUser(Request $request){

        $return_array = array();

        $findUserInput = $request->get('finduser');

        $user = User::where('name',$findUserInput) -> first();

        $user->name = $request->get('name');

        $user->save();

        $data =  DB::select("SELECT * FROM users where name='$findUserInput'");


        if(count($data) > 0){
            foreach($data as $da){
                $return_array[] = $da;
            } 
        }

        return $return_array;

    }

更新:我还制作了ajax函数和控制器来查找运行良好的用户。

Ajax函数:

$('#buttonFindUser').on('click', function () {
                  var $name = $('input[name=findUser]').val();

                    $.ajax({
                        type:"GET",
                        url:'/code/task1/public/findUser',
                        data: {
                             'name' : $name,
                         },
                        success:function(data){


                            $("#input1").val(data[0].name);
                            $("#input2").val(data[0].email);
                            $("#input3").val(data[0].created_at);

                        }

                    });
         });

我的控制器中的功能:

public function findUser(Request $request){

        $return_array = array();

        $findUserInput = $request->get('name');

        $data =  DB::select("SELECT * FROM users where name='$findUserInput'");


        if(count($data) > 0){
            foreach($data as $da){
                $return_array[] = $da;
            } 
        }

        return $return_array;

    }

有任何想法吗?

但是我有此错误消息Creating default object from empty value

发生的情况是您正在尝试保存不存在的用户。 您需要检查$user在控制器中是否为null 现在,找不到提供的名称的$user因此$user变为空。

因此,您可以修改代码以对$user进行空检查,如下所示:

public function updateUser(Request $request){

    $return_array = array();

    $findUserInput = $request->get('finduser');

    $user = User::where('name',$findUserInput) -> first();

    if(!$user)
        return response()->json(['status'=>false,'Description' => 'User could not be found.']);

    $user->name = $request->get('name');

    $user->save();

    $data =  DB::select("SELECT * FROM users where name='$findUserInput'");


    if(count($data) > 0){
        foreach($data as $da){
            $return_array[] = $da;
        } 
    }

    return $return_array;

}

这是空检查:

if(!$user)
    return response()->json(['status'=>false,'Description' => 'User could not be found.']);

当我们没有有效的用户时,我们只返回一个json响应,指出找不到该用户。

更新:

鉴于未在控制器中检索到输入,因此需要在JS中进行一些更改:

首先,您正在执行发布请求,但看不到CSRF令牌。 要添加它,请遵循以下答案: https : //stackoverflow.com/a/37582060/6270112

因此,您的数据现在将变为:

data: '_token=' + $('#token').val() + '&name=' + $name + '&finduser=' + $finduser

另外,正如aleksejjj提到的,您还需要修复jquery选择器。 因此,您现有的选择器:

var $finduser = $('input[name=findUser]').val();  
var $name = $('input[name=userprofilename]').val();

会变成:

var $finduser = $('input[name^="findUser"]').val();  
var $name = $('input[name^="userprofilename"]').val();

接下来,在您的控制器中,您需要将$request->get(...)替换$request->get(...) $request->input(...)

$findUserInput = $request->get('finduser');

会变成

$findUserInput = $request->input('finduser');

并在名称字段中重复同样的操作。

您需要检查您的用户是否存在

$user = User::where('name', $findUserInput)->first();

if($user)
{
    $user->name = $request->get('name');

    $user->save();
}

更改此代码

$user = User::where('name',$findUserInput) -> first();

$user = User::where('name','=',$findUserInput) -> first();

我希望这会起作用。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM