我知道这个问题已多次出现,但我无法解决这个问题。
这是我的路线:
Route::post('/masters/board/edit', 'MastersController@editBoard');
我的控制器:
public function editBoard() {
$board = Board::findOrFail(Input::get('id'));
$board->nick_name = Input::get('nick_name');
$board->board_name = Input::get('board');
$board->type = Input::get('type');
$board->save();
return Redirect::action('MastersController@getBoards');
}
我的JS:
$("#edit_form").submit(function(e) {
e.preventDefault();
var type = "#edit_form";
var formData = {
id : $(type + " #id").val(),
nick_name : $(type + " #nick_name").val(),
name : $(type + " #board").val()
}
$.ajax({
type: "POST",
url: "masters/board/edit",
data: formData,
success: function(data) {
console.log(data);
}
});
});
});
这是一个错误:
[Error] Failed to load resource: the server responded with a status of 500 (Internal Server Error) (edit, line 0)
任何人都可以看到原因吗?
答案 0 :(得分:0)
使用csrf_token
添加元标记。
<meta name="_token" content="{{ csrf_token() }}" />
并将该令牌添加到您的数据中。
var formData = {
id : $(type + " #id").val(),
nick_name : $(type + " #nick_name").val(),
name : $(type + " #board").val()
_token: $('meta[name="_token"]').attr('content')
}
如果您要执行大量发布请求,请尝试以下操作。 使用以下脚本使用csrf令牌设置ajax请求。
$(function() {
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="_token"]').attr('content')
}
});
});
如果您使用的是laravel 5,则应该可以开箱即用。
如果不是,则需要编辑app/filters.php
文件。
用以下内容替换csrf过滤器。
Route::filter('csrf', function() {
$token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
if (Session::token() != $token)
throw new Illuminate\Session\TokenMismatchException;
});