Javascript laravel无法发布ajax服务器状态为419的数据

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

我正在和拉威尔一起做一个项目

当我更改以下select元素的selected选项时,我应该将selected值插入mysql数据库,以从服务器检索关于所选id的所有数据(例如用户名)

这是select元素(adminArea.blade.php):


@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')
   }
});