API:Laravel 中的 Ajax 帖子 - 403(禁止)
Posted
技术标签:
【中文标题】API:Laravel 中的 Ajax 帖子 - 403(禁止)【英文标题】:API: Ajax post in Laravel - 403 (Forbidden) 【发布时间】:2021-10-16 23:35:02 【问题描述】:我在 ajax 调用期间收到 403 forbidden
。
仅当ajax
在app.js
上时才会发生这种情况。
如果我将remove
从app.js
转到index.blade.php
,则工作正常。
如何让它在我的app.js
上也能正常工作?
查了很多,发现需要添加这个
$.ajaxSetup( 标题: 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') );
在 ajax 之前,但仍然无法正常工作..
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
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);
);
【问题讨论】:
【参考方案1】:由于 url()
辅助方法在app.js
文件中不起作用,因此您必须在ajax 中设置url
如果你把这个放在app.js
中,你的ajax应该是这样的
$.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
【讨论】:
没有 URL 的第一个/
并且工作得很好。非常感谢!顺便说一句,有没有办法在 app.js 中使用像 url() 这样的辅助方法,或者只在blade.php上工作?
它用于刀片,但你可以在 js 中定义它也可以看到:***.com/questions/30938077/…以上是关于API:Laravel 中的 Ajax 帖子 - 403(禁止)的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:routes/api.php 或 routes/web.php 中的 AJAX 请求端点?