我正在尝试使用 ajax 将数据发布到 Laravel 后端,但是我收到“CSRF 令牌不匹配”错误。
首先,我将令牌放置在 html 中(在正文中,但在表单之外,因为它不是整个表单,只有 2 个要发布的元素):
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
然后在“文档准备就绪”中,我尝试使用ajax发布数据。
data["_token"] = jQuery('#token').val();
// Also tried this:
jQuery.ajaxSetup({
headers: {
'X-CSRF-TOKEN': jQuery('#token').val()
}
})
console.log(data) // returns the array with _token: "esOKmY8Tpr4UvhTYMhWcWui0rpvYEjJ3es7ggics"
jQuery.ajax({
type: "POST",
url: '/my-route',
data: data,
success: function() {
console.log("A");
}
});
我想要发布的数据只是一个更大表单的一小部分,通过使用这种方法,我可以自动完成表单。一小块 html 输入不在任何其他子表单内。也许是这样?
- Form:
- A: bla // to be posted
- B: hello // to be posted
- C: smt else // no post
但是获取值没问题
路线:
Route::post('/my-route', 'AdminController@theFunction')->middleware('admin');
编辑:我将
<input>
更改为 <meta>
标签
我也遇到了同样的问题 尝试将 CSRF 标签放入您的
meta
中,如下所示
<meta name="csrf-token" content="{{ csrf_token() }}" />
并在你的ajax代码中读取它,如下所示:
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
最后更新
请像这样修改您的 url 变量:
jQuery.ajax({
type: "POST",
url: '/my-route'+'?_token=' + '{{ csrf_token() }}',
data: data,
success: function() {
console.log("A");
}
});
试试这个
var formData = new FormData(); formData.append("_token", "{{ csrf_token() }}"); $.ajax({ 标题:{ 'X-CSRF-TOKEN': "{{ csrf_token() }}" }, url: '保存搜索', 数据:表单数据, 处理数据:假, 类型:'发布', 成功:函数(数据){ 警报(数据); } });
我在 Laravel 8 中遇到了一个问题,我注意到令牌是通过我的 AJAX 请求在 URL 中发送的,并且 URL 是正确的。
尽管如此,我仍然收到错误。经过进一步调查,我意识到我已经改变了我的
中
'same_site'
的值
会话.php
归档为“无”。
将其改回
'same_site' => "lax"
后,我就解决了问题。