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

时间:2016-10-25 11:58:11

标签: php ajax laravel laravel-5

我想用ajax向laravel中的控制器发送post请求。 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;

    }

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

  

但我收到此错误消息Creating default object from empty value

正在发生的是您正在尝试保存不存在的用户。您需要检查控制器中$user是否为null。现在,找不到提供名称的用户,因此$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->input(...)

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

将成为

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

并重复使用名称字段。

答案 1 :(得分:0)

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

  def show(conn, _params) do
    render(conn, MyApp.SpecialView, :show, message: "Hello")
  end

  def show(conn, _params) do
    conn
    |> put_view(MyApp.SpecialView)
    |> render(:show, message: "Hello")
  end

答案 2 :(得分:-2)

更改此代码

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

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

我希望这会奏效。 :)