Javascript laravel无法发布ajax服务器状态为419的数据
我正在和拉威尔一起做一个项目 当我更改以下select元素的selected选项时,我应该将selected值插入mysql数据库,以从服务器检索关于所选id的所有数据(例如用户名) 这是select元素(adminArea.blade.php):Javascript laravel无法发布ajax服务器状态为419的数据,javascript,php,ajax,laravel,request,Javascript,Php,Ajax,Laravel,Request,我正在和拉威尔一起做一个项目 当我更改以下select元素的selected选项时,我应该将selected值插入mysql数据库,以从服务器检索关于所选id的所有数据(例如用户名) 这是select元素(adminArea.blade.php): @foreach($users作为$user) {{$user->name.'.$user->name} @endforeach 这是被调用的函数(adminArea.blade.php):: 以下是我的路线(web.php): Route::g
@foreach($users作为$user)
{{$user->name.'.$user->name}
@endforeach
这是被调用的函数(adminArea.blade.php)::
以下是我的路线(web.php):
Route::get('/adminarea','AdminAreaController@index')->名称('adminArea');
路线::post('/adminarea/postemployee','AdminAreaController@post_employee')->name('adminAreaPostEmployee');
以下是我的控制器方法(adminAreaController.php):
公共职能岗位员工(请求$Request)
{
$select=$request->get('emp_selected');
$user=user::其中('id',$select);
echo$user;
}
公共职能指数()
{
$operations=Operation::all();
$users=User::all()->sortBy('姓氏');
$rooms=Room::all();
返回视图('adminArea',compact('users','rooms','operations');
}
但是,当我更改所选值时,不会发生任何事情。。。如果我转到开发人员工具,我会看到以下错误:
未能加载资源:服务器以419状态响应
(未知状态)。
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
此路由不支持GET方法。支持的方法:
邮局
我没有看到任何警报。有人能帮我吗?方法NotAllowedHttpException的HTTP状态代码是
405
看
public function\uuu构造(数组$allow,字符串$message=null,\Throwable$previous=null,?int$code=0,数组$headers=[]))
{
$headers['Allow']=strtoupper(内爆(',',$Allow));
父项::_构造(405,$message,$previous,$headers,$code);
}
TokenMismatchException
HTTP状态代码为419
看
受保护函数prepareException(异常$e)
{
if($e ModelNotFoundException的instanceof){
$e=新的NotFoundHttpException($e->getMessage(),$e);
}elseif($e实例授权例外){
$e=新的AccessDeniedHttpException($e->getMessage(),$e);
}elseif($e令牌失配异常实例){
//HTTP状态代码在此处的标头中发送
$e=新的HttpException(419,$e->getMessage(),$e);
}elseif($e可疑操作异常实例){
$e=新的NotFoundHttpException('提供了错误的主机名',$e);
}
返回$e;
}
因此,这似乎是一个CSRF令牌问题
确保文档的头部有一个元标记,如下所示
也从
我认为HTTP方法应该定义为method
参数而不是type
(尽管type
有效)\_(ツ)_/”)
//在每个Ajax请求中发送一个CSRF令牌头
$.ajaxSetup({
标题:{
'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content'))
}
});
函数fillEmployeeData(emp_id){
var emp_selected=emp_id.value;
$.ajax({
方法:“张贴”,
url:“{route('adminAreaPostEmployee')}}”,
数据:“emp_selected=”+emp_selected,
成功:功能(数据){
var emp_data=JSON.parse(数据);
警报(emp_数据);
}
});
};
但现在你会犯错误
无法将Illumb\Database\Eloquent\Builder类的对象转换为字符串
因为您试图返回一个查询生成器实例User::where('id',$select)
,而不是序列化用户记录本身
我想你可能想这么做
公共职能岗位员工(请求$Request)
{
$select=$request->get('emp_selected');
返回用户::find($select);
}
希望这对您有所帮助尝试使用“方法”而不是“类型”。如果您使用的是jQuery 1.9.0之前的版本,则应该使用类型
function fillEmployeeData(emp_id) {
var emp_selected = emp_id.value;
$.ajax({
method: "POST",
url: "{{ route('adminAreaPostEmployee') }}",
data: 'emp_selected=' + emp_selected,
success: function (data) {
var emp_data = JSON.parse(data);
alert(emp_data);
}
});
};
这是laravel的CSRF保护, 您可以在头部添加csrf元标记
<meta name="csrf-token" content="{{ csrf_token() }}">
adminAreaController
是一个打字错误吗?因为它应该是adminAreaController
并且我无法复制,所以您使用的是哪个版本的Laravel和JQuery?另外,请尝试清除您的路由php artisan路由:clear
是的,这是一个打字错误!
<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});