API: Ajax post in Laravel - 403 (Forbidden)



我在ajax调用期间获得403 forbidden。只有当ajaxapp.js上时才会发生这种情况。如果我将removeapp.js放到index.blade.php,则工作完美。

我怎样才能使它也工作在我的app.js?我搜索了很多,发现我需要添加这个

.ajaxSetup美元({标题:{"X-CSRF-TOKEN":$('元[name ="csrf-token").attr("内容")}});

在ajax之前,但仍然不能工作。

控制器:

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use DB;
class API extends Controller
{
public function getSomething(Request $r)
{
$r->validate([
'user' => 'required'
]);
$data = DB::table('posts')->orderBy('id', 'desc')->get();

return $data;
}
}

web.php

Route::group(['prefix' => 'api'], function(){
Route::post('getSomething', 'API@getSomething');
});

index.blade.php

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<meta name="csrf-token" content="{{ csrf_token() }}" />
.... some of my content ....
<script src="{{ asset('assets/js/app.js') }}"></script>

app.js

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '{{ url("api/getSomething") }}', 
type: 'POST',
data: {
user: '1',
_token: '{{ csrf_token() }}',
_testThisAjax: true
},
success: function (c) {
console.log(c);                                         
},
error: function(e)
{
console.log(e);
}
});

由于{{ url() }}helper方法在app.js文件中不起作用,因此您必须在ajax中设置url

你的ajax应该是这样的,如果你把它放在app.js

$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '/api/getSomething', 
type: "POST",
data: {
user: '1',
_testThisAjax: true
},
success: function (c) {
console.log(c);                                         
},
error: function(e)
{
console.log(e);
}
});

注意:在csrf或数据中使用ajax头:

data: {_token: $('meta[name="csrf-token"]').attr('content') , 'key' : 'value'}

查看更多:https://laravel.com/docs/8.x/csrf

最新更新