[英]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.