我正在将laravel 4
应用升级为laravel 5.2
,我需要在代码中重新考虑很多事情。其中之一是CSRF
AJAX
次请求。我无法弄清楚如何在我的路线文件中正确处理它。
当然,我在我的视图中包含了csrf的元数据:
<meta name="csrf-token" content="{{ csrf_token() }}" />
我的路线档案:
Route::post('/edituser', 'UsersController@toEditUser');
我的剧本:
var _token = $('meta[name="csrf-token"]').attr('content');
function triggerEditUser(id){
$.post(_token+'/edituser',{id:id},function(data){
if(data){
console.log(data);
}
});
}
我的控制员:
public function toEditUser(){
if(Request::ajax()){
$user = User::find(Input::get('id'));
return Response::json($user);
}
}
我收到错误消息:
http://mysite.local/kg9VLUc0QWP59AqSP0OCPWjwsWPg33ypZ47FecRC/edituser 404 (Not Found)
答案 0 :(得分:0)
可能是你的解决方案就像是
$.post( '/edituser',{id:id, token:_token},function(data){
取代
$.post(_token+'/edituser',{id:id},function(data){
答案 1 :(得分:0)
根据Laravel documentation,您应该使用标头发送 csrf 令牌。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
,
$.post('/edituser',{id:id,_token:_token},function(data){
if(data){
console.log(data);
}
});
或者,您也可以将令牌作为数据发送
答案 2 :(得分:0)
只是为了测试并告诉我答案。 在您的控制器中更改
public function toEditUser(){
if(Request::ajax()){
$user = User::find(Input::get('id'));
return Response::json($user);
}
}
通过
public function toEditUser(){
if(Request::ajax()){
$user = User::find(Input::get('id'));
foreach ($user as $u) {
$users[]=$result->yourcolumn;
}
return $users;
}
}
并添加
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});