我在执行ajax POST时遇到Laravel 5.2的一些问题我收到了403错误
1)Ajax POST请求
$.ajax({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
data: {category_id:category_id, _token: $('meta[name="csrf-token"]').attr('content')},
url: '/admin/gallery/create/ajax',
method: 'POST',
success: function(data)
{
console.log(data);
$('#object').empty();
$('#object').append(data);
},
error: function(msg)
{
console.log(msg);
}
});
2)路线
Route::post('admin/gallery/create/ajax', ['as' => 'gallery.ajax', 'uses' => 'GalleryController@getObject']);
3)控制器
public function getObject(Request $request){
$data = array();
if($request->category_id == 'users'){
$allItems = User::all();
foreach ($allItems as $key => $item) {
$data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
}
}
if($request->category_id == 'authors'){
$allItems = Author::all();
foreach ($allItems as $key => $item) {
$data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
}
}
if($request->category_id == 'galleries'){
$allItems = Gallery::all();
foreach ($allItems as $key => $item) {
$data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
}
}
return $data;
}
4)结果
POST 403(禁止)
5)但有路线:
Route::post ('admin/gallery/create/ajax', function(\Symfony\Component\HttpFoundation\Request $request){
if (Session::token() == Request::header('x-csrf-token'))
{
echo $request->category_id;
} else {
return 'ERROR';
}
});
6)结果
7)GET一切正常
$.ajax({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
data: {category_id:category_id},
url: '/admin/gallery/create/ajax/',
method: 'get',
success: function(data)
{
$('#object').empty();
$('#object').append(data);
},
error: function(msg)
{
console.log(msg);// если ошибка, то можно посмотреть в консоле
}
});
ROUTE GET
Route::get ('/admin/gallery/create/ajax/', ['as' => 'gallery.ajax', 'uses' => 'GalleryController@getObject']);
9。需要有关AJAX POST的帮助
答案 0 :(得分:0)
确保已将路由添加到web
中间件组。否则,将无法验证令牌。
web
中间件组如下所示:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
正如您所见,它会在\App\Http\Middleware\VerifyCsrfToken::class,
中验证令牌。
因此,在routes.php
文件中,将中间件组添加如下:
Route::group(['middleware' => ['web']], function () {
// Your route goes here
});
答案 1 :(得分:0)
正确答案 https://stackoverflow.com/a/30508294/5908145
现在使用这个参数:
magnetingHeading
VerifyCsrfToken.php
Route::post ('/admin/gallery/create/ajax', ['as' => 'gallery.ajax', 'uses' => 'GalleryController@getObject']);
$.ajax({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
data: {category_id:category_id, _token: $('meta[name="csrf-token"]').attr('content')},
url: '/admin/gallery/create/ajax',
method: 'POST',
success: function(data)
{
console.log(data);
$('#object').empty();
$('#object').append(data);
},
error: function(msg)
{
console.log(msg);
}
});
感谢所有人!