Sal*_*dor 1 php ajax jquery laravel laravel-5.5
我真的很感谢这方面的帮助。我尝试了其他人在其他帖子上建议的所有解决方案,包括:Laravel 5.5 ajax调用419(未知状态)和此Ajax LARAVEL 419 POST错误解决方案。
但是,即使在头部设置了csrf_token元标记,我仍然会收到419错误:
<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
在ajax发布调用之前,我像这样设置ajax csrf_token:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Run Code Online (Sandbox Code Playgroud)
之后,我将ajax数据中的csrf_token作为变量发送,如下所示:
$.ajax({
url : "/getCompare",
type :"POST",
cash : false,
data :{ id : id,_token: '{{csrf_token()}}'},
success :
function( response ) {
$("#compare_products").html(response);
}
});
Run Code Online (Sandbox Code Playgroud)
页面的应用方式使用户反复请求ajax调用以比较产品。它在很多尝试下都可以正常工作,但是在特定情况下,会引发419错误。这种情况有时是当我在页面加载后大约3分钟按下一个按钮时,出现了这个错误。有时它会在第三次或第四次尝试时给出错误。重新加载页面后,问题已解决,但仍然按照我解释的方式再次发送该错误。
我的问题是为什么会这样?是3分钟后csrf_token过期还是什么?而且我不想在verifyCsrfToken中间件中添加异常。该问题的解决方案是什么?
PS: leorent的答案是正确的。但是将我的项目上传到实际的在线服务器后。问题已经解决了。我不知道为什么,但是这个问题是因为Windows和在本地主机中本地运行laravel项目。csrf令牌会话在寡妇localhost服务器上经常过期。不用担心,将项目上传到实际服务器后,您的csrf问题将自动得到解决。
添加带有ID的meta标签:
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
然后在你的ajax电话:
$.ajax({
url : "/getCompare",
type :"POST",
cash : false,
data: {'id': id, "_token": $('#token').val()},
type: 'POST',
success: function (response) {
},
error: function (response) {
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |