首页 文章

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

提问于
浏览
0

我试图用ajax将数据发布到Laravel后端,但是我收到'CSRF令牌不匹配'错误 .

首先,我将令牌放在html中(在正文中但在表单之外,因为它不是整个表单,它只发布了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

但是获得 Value 的工作还可以

路线:

Route::post('/my-route', 'AdminController@theFunction')->middleware('admin');


Edit :我将 <input> 更改为 <meta> 标记

2 回答

  • 1

    我遇到了同样的问题,试着在你的_1325562中添加包含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>
    

    Last Update

    请修改你的url变量,如下所示:

    jQuery.ajax({
        type: "POST",
        url: '/my-route'+'?_token=' + '{{ csrf_token() }}',
        data: data,
        success: function() {
             console.log("A");
        }
      });
    
  • 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 );
        }
        });
    

相关问题