我正试图用ajax将数据发布到Laravel后端,但是我正在获得'CSRF令牌不匹配'错误。
首先,我在html中放置了token(在body中,但在表单之外,因为它不是整个表单,只有2个元素要发布):<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
然后在'document ready',我尝试用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');
Edit: I changed <input>
to <meta>
tag
我也遇到了同样的问题试着在你的meta
中加入include CSRF标签,像这样
<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");
}
});
Try This
<>之前var formData = new formData ();formData。Append ("_token", "{{csrf_token()}}");. ajax({美元标题:{' x - csrf_token ': "{{csrf_token()}}"},url:"save_search",数据:formData,processData:假的,类型:"文章",成功:function (data) {Alert (data);}});