Laravel 5.5:AJAX 的 419 未知状态
Posted
技术标签:
【中文标题】Laravel 5.5:AJAX 的 419 未知状态【英文标题】:Laravel 5.5 : 419 unknown status with AJAX 【发布时间】:2018-07-18 17:40:57 【问题描述】:我请求POST
:
路线:
Route::post('/register','CommonController@postRegister')->name('register');
CSRF 元标记:
<meta name="csrf-token" content=" csrf_token() ">
$("#submitSalonForm").click(function(e)
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
$.ajax(
url: "/register",
type: "post",
data: new FormData($('form')[1]),
cache: false,
contentType: false,
processData: false,
success:function(response)
return alert('Form 2 submitted');
);
);
还有例外:
有时会出现异常,有时代码运行流畅,我不知道我在这里缺少什么。
【问题讨论】:
跟踪说明了什么?似乎那里可能有一些有用的东西 【参考方案1】:将ajax方法从post改为get
<input type="hidden" name="_token" id="token" value=" csrf_token() ">
Ajx 调用:
let formData = $('form').serializeArray();
$.ajax(
url: "/register",
type: "POST",
data: formData, "_token": $('#token').val(),
cache: false,
datatype: 'JSON',
processData: false,
success: function (response)
console.log(response);
,
error: function (response)
console.log(response);
);
你的路线是得到
Route::get('/register','CommonController@showRegister')->name('register');
Ajax 调用正在发出一个 post 请求,laravel 发出 http 异常。
编辑: Laravel 419 post错误通常与api.php和token授权有关
所以尝试在 ajax 正文中包含令牌,而不是像上面那样。
【讨论】:
我的错,路线已发布,我已更新问题。 @Gammer 新的表单数据功能在哪里? 没有那个功能,只有new FormData($('form')[1])
!真的!
还是同样的问题,有时有效,有时无效,当我花一些时间填写表格时,它给了我 419,但是当我快速完成时,它运行正常。
419 表示令牌不匹配异常,因此请在 ajax 正文中包含令牌,【参考方案2】:
无需单独设置 ajax。 Laravel 会为应用程序管理的每个活动用户会话自动生成一个 CSRF “令牌”。用这个获取令牌:
var token = " csrf_token() ";
将令牌传递到data
var token = " csrf_token() ";
var formData = new FormData($('form')[1])
$.ajax(
url : '/register',
data : _token:token,formData:formData,
type: 'post',
...
)
【讨论】:
无效,同样的 419 异常 :(,它杀了我 如果它让你如此困扰,我有一个非常糟糕的主意。从app/Http/Middleware/VerifyCsrfToken.php
的csrf验证中排除这条路由【参考方案3】:
好吧,我知道我为时已晚,但我确实遇到了你所面临的确切问题。
我 100% 确定令牌已随请求一起发送,但问题仍然存在。
所以,经过太多的搜索,我终于通过以下步骤修复了它:
php artisan config:clear
php artisan view:clear
php artisan route:clear
php artisan cache:clear
php artisan clear-compiled
【讨论】:
【参考方案4】:除了将 crsf-token 值放在标头元标记中之外,您还需要在 AJAX 请求中传递它,例如:
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
【讨论】:
以上是关于Laravel 5.5:AJAX 的 419 未知状态的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.5 AJAX Post Call上没有消息异常。第203行,Handler.php,419未知状态
多次尝试后,Laravel 5.5 在 ajax 调用中不断收到 419 发布错误
POST http://localhost:8000/offers-ajax/store 419 (未知状态) Laravel AJAX