我正在尝试使用ajax将数据发布到Laravel后端,但是我得到了' CSRF令牌不匹配'错误。
首先,我已将令牌放在html中(在正文中但在表单之外,因为它不是整个表单,只有2个要发布的元素):
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
然后在&#39; document ready&#39;中,我尝试使用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>
代码
答案 0 :(得分:1)
我遇到了同样的问题
尝试在您的meta
中添加包含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>
上次更新
请修改您的网址变量,如下所示:
jQuery.ajax({
type: "POST",
url: '/my-route'+'?_token=' + '{{ csrf_token() }}',
data: data,
success: function() {
console.log("A");
}
});
答案 1 :(得分:0)
试试这个
var formData = new FormData(); formData.append("_token", "{{ csrf_token() }}"); $.ajax({ headers: { 'X-CSRF-TOKEN': "{{ csrf_token() }}" }, url: 'save_search', data: formData, processData: false, type: 'POST', success: function ( data ) { alert( data ); } });