Ajax发布到Laravel - CSRF令牌不匹配

时间:2016-09-16 20:09:49

标签: javascript php jquery ajax laravel

我正在尝试使用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>代码

2 个答案:

答案 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 );
    }
    });