获取CSRF令牌不匹配Laravel

时间:2020-03-17 10:13:41

标签: javascript php ajax laravel laravel-5

我正在尝试使用javascript提交表单,但我不断收到此错误CSRF token mismatch。我试图将var url = "{{ route('review.store') }}";更改为{{ route('review.store') }}?_token={{ csrf_token() }},它正在将表单提交给没有数据的数据库。我已经看到很多与此类似的问题,但是我的案子没有得到解决。如何解决这个问题?

<form id="form" enctype="multipart/form-data">
    <input type="hidden" value="{{csrf_token()}}" id="token"/>
<div class="form-group" >
<label for="title">Title</label>
<input type="text" name="title" >
</div>

<div class="form-group">
<label for="description">Description</label>
<input type="text" name="description">
</div>
</form>
<input type='button' value="Submit" id="btn"/>

JavaScript

var token = $("#token").val();
$(document).ready(function(){

$("#btn").click(function(event){
event.preventDefault();
var url = "{{ route('review.store') }}";
var form = $('#form')[0];
var formData = new FormData(form);
formData.append('_token', token);
$.ajax({
    url: url,
    data: formData,
    type: 'POST',
    cache: false,
    contentType: false,
    processData: false,
    success:function(data){
    if($.isEmptyObject(data.error)){
    $("#msg").html("successfull");
    $("#msg").fadeOut(3000);
     }
    }
});
});

});

路线

  Route::resource('review','ProductReviewController');

6 个答案:

答案 0 :(得分:0)

您在隐藏字段中缺少名称_token,只需序列化 形成并发送请求

    <form id="form" enctype="multipart/form-data">

    <input type="hidden" name ="_token" value="{{csrf_token()}}" id="token"/>
    <div class="form-group" >
    <label for="title">Title</label>
    <input type="text" name="title" >
    </div>

    <div class="form-group">
    <label for="description">Description</label>
    <input type="text" name="description">
    </div>
<input type='button' value="Submit" id="btn"/>

    </form>


$(document).ready(function(){

$("#btn").click(function(event){
event.preventDefault();
var url = "{{ route('review.store') }}";
var formData = $('#form').serializeArray();
$.ajax({
    url: url,
    data: formData,
    type: 'POST',
    cache: false,
    contentType: false,
    processData: false,
    success:function(data){
    if($.isEmptyObject(data.error)){
    $("#msg").html("successfull");
    $("#msg").fadeOut(3000);
     }
    }
});
});

});

答案 1 :(得分:0)

在您的jquery中,请像这样获得令牌:

    var data = {
        "_token": $('#token').val()
    };

您也可以尝试

    data: {
       "_token": "{{ csrf_token() }}",
       "id": myid
    }

所以您的ajax请求将是

$.ajax({
  url : "url",
  method:"post",
  data : {
    "_token": $('#csrf-token')[0].content
  },
  // Other stuffs to do
});

答案 2 :(得分:0)

请尝试像这样使用,而不是序列化表单数据

ManagerTest.swift

答案 3 :(得分:0)

尝试使用@csrf{{ csrf_field() }}

答案 4 :(得分:0)

您仍然可以尝试此操作。我带走了表单标签和表单上的csrf令牌

//表格

    <div class="form-group" >
    <label for="title">Title</label>
    <input type="text" id="title" name="title" >
    </div>

    <div class="form-group">
    <label for="description">Description</label>
    <input type="text" id="description" name="description">
    </div>
    </form>
    <input type='button' class="btn-submit" value="Submit" id="btn"/>

// ajax呼叫

<script>
$(function() {
   $(".btn-submit").click(function(e){

        var title= $("input[name=title]").val();

        var description= $("input[name=description]").val();


        $.ajax({
              url: murl +'/your-url',
              type: "post",
              data: {'title':title, 'description':description, '_token':  $('input[name=_token]').val()},
              success: function(data){

              console.log(data);

              }


        });


    });


});



</script>

答案 5 :(得分:0)

解决此问题“ X-CSRF-TOKEN”的最佳方法是在主布局中添加以下代码,然后继续正常进行ajax调用:

在标题中

<meta name="csrf-token" content="{{ csrf_token() }}" />

在Form中,在表单内的任何位置添加csrf令牌

<form>
{{ csrf_field() }}
</form>

在脚本中

<script type="text/javascript">
$.ajax({
    url: url,
    data: formData,
    type: 'POST',
    cache: false,
    contentType: false,
    processData: false,
    headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    success:function(data){
    if($.isEmptyObject(data.error)){
    $("#msg").html("successfull");
    $("#msg").fadeOut(3000);
     }
    }
});

</script>

我希望它对您有用

相关问题