Ajax Post到Laravel - CSRF令牌不匹配


Ajax Post to Laravel - CSRF Token Mismatch

我正试图用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);}});